@powerlines/plugin-env 0.15.141 → 0.15.142
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/automd-generator-BNg74tyV.cjs +37 -0
- package/dist/automd-generator-DoKLIMuw.mjs +32 -0
- package/dist/automd-generator-DoKLIMuw.mjs.map +1 -0
- package/dist/babel/index.cjs +5 -2
- package/dist/babel/index.d.cts +14 -1
- package/dist/babel/index.d.mts +14 -1
- package/dist/babel/index.mjs +4 -1
- package/dist/babel/plugin.cjs +4 -140
- package/dist/babel/plugin.d.cts +14 -7
- package/dist/babel/plugin.d.mts +14 -7
- package/dist/babel/plugin.mjs +3 -138
- package/dist/babel-BZqmdVF4.cjs +0 -0
- package/dist/babel-DgietUY3.mjs +1 -0
- package/dist/chunk-CNVrAnJR.cjs +48 -0
- package/dist/{_virtual/rolldown_runtime.cjs → chunk-CsF2CmBJ.mjs} +6 -2
- package/dist/components/docs.cjs +13 -69
- package/dist/components/docs.d.cts +1 -21
- package/dist/components/docs.d.mts +1 -21
- package/dist/components/docs.mjs +12 -67
- package/dist/components/env.cjs +13 -588
- package/dist/components/env.d.cts +1 -19
- package/dist/components/env.d.mts +1 -19
- package/dist/components/env.mjs +11 -584
- package/dist/components/index.cjs +17 -5
- package/dist/components/index.d.cts +3 -2
- package/dist/components/index.d.mts +3 -2
- package/dist/components/index.mjs +14 -2
- package/dist/components-BUo6Koax.cjs +0 -0
- package/dist/components-DDFmImcI.mjs +1 -0
- package/dist/confbox.DA7CpUDY-DShUZ_rW.mjs +23 -0
- package/dist/confbox.DA7CpUDY-DShUZ_rW.mjs.map +1 -0
- package/dist/confbox.DA7CpUDY-r6FXRsI6.cjs +28 -0
- package/dist/confbox.DnMsyigM-C13n3X-S.cjs +415 -0
- package/dist/confbox.DnMsyigM-V6Wj0LPC.mjs +405 -0
- package/dist/confbox.DnMsyigM-V6Wj0LPC.mjs.map +1 -0
- package/dist/create-reflection-resource-B3friIs9.mjs +98 -0
- package/dist/create-reflection-resource-B3friIs9.mjs.map +1 -0
- package/dist/create-reflection-resource-BJj83ii4.cjs +103 -0
- package/dist/create-reflection-resource-DSLbLsX2.d.cts +16 -0
- package/dist/create-reflection-resource-DSLbLsX2.d.cts.map +1 -0
- package/dist/create-reflection-resource-DwWJAo-G.d.mts +16 -0
- package/dist/create-reflection-resource-DwWJAo-G.d.mts.map +1 -0
- package/dist/defu-CrqNIh1A.cjs +227 -0
- package/dist/defu-DV5Grr85.mjs +180 -0
- package/dist/defu-DV5Grr85.mjs.map +1 -0
- package/dist/dist-BQc8ZRwl.cjs +13 -0
- package/dist/dist-C_a6goTt.cjs +15282 -0
- package/dist/dist-CjWvISyq.mjs +15271 -0
- package/dist/dist-CjWvISyq.mjs.map +1 -0
- package/dist/dist-mV5Swt78.mjs +13 -0
- package/dist/dist-mV5Swt78.mjs.map +1 -0
- package/dist/docs-B-SDRHeg.cjs +75 -0
- package/dist/docs-B0d8pdIg.d.mts +23 -0
- package/dist/docs-B0d8pdIg.d.mts.map +1 -0
- package/dist/docs-DMfzQuvP.d.cts +23 -0
- package/dist/docs-DMfzQuvP.d.cts.map +1 -0
- package/dist/docs-DbRoWmL_.mjs +70 -0
- package/dist/docs-DbRoWmL_.mjs.map +1 -0
- package/dist/docs-helper-2fe7M3Th.mjs +24 -0
- package/dist/docs-helper-2fe7M3Th.mjs.map +1 -0
- package/dist/docs-helper-4MoQ5-R3.cjs +28 -0
- package/dist/env-BIyd8CTA.d.cts +21 -0
- package/dist/env-BIyd8CTA.d.cts.map +1 -0
- package/dist/env-BKmI7DyR.d.mts +21 -0
- package/dist/env-BKmI7DyR.d.mts.map +1 -0
- package/dist/env-D9oCn-AS.mjs +587 -0
- package/dist/env-D9oCn-AS.mjs.map +1 -0
- package/dist/env-R63eR4RP.cjs +598 -0
- package/dist/helpers/automd-generator.cjs +3 -31
- package/dist/helpers/automd-generator.d.cts +2 -1
- package/dist/helpers/automd-generator.d.cts.map +1 -0
- package/dist/helpers/automd-generator.d.mts +2 -1
- package/dist/helpers/automd-generator.d.mts.map +1 -0
- package/dist/helpers/automd-generator.mjs +2 -29
- package/dist/helpers/create-reflection-resource.cjs +11 -97
- package/dist/helpers/create-reflection-resource.d.cts +3 -14
- package/dist/helpers/create-reflection-resource.d.mts +3 -14
- package/dist/helpers/create-reflection-resource.mjs +10 -95
- package/dist/helpers/docs-helper.cjs +5 -23
- package/dist/helpers/docs-helper.d.cts +4 -2
- package/dist/helpers/docs-helper.d.cts.map +1 -0
- package/dist/helpers/docs-helper.d.mts +4 -2
- package/dist/helpers/docs-helper.d.mts.map +1 -0
- package/dist/helpers/docs-helper.mjs +4 -21
- package/dist/helpers/index.cjs +38 -32
- package/dist/helpers/index.d.cts +9 -6
- package/dist/helpers/index.d.mts +9 -6
- package/dist/helpers/index.mjs +12 -6
- package/dist/helpers/load.cjs +10 -134
- package/dist/helpers/load.d.cts +3 -34
- package/dist/helpers/load.d.mts +3 -34
- package/dist/helpers/load.mjs +8 -130
- package/dist/helpers/persistence.cjs +15 -321
- package/dist/helpers/persistence.d.cts +3 -83
- package/dist/helpers/persistence.d.mts +3 -83
- package/dist/helpers/persistence.mjs +4 -308
- package/dist/helpers/reflect.cjs +13 -262
- package/dist/helpers/reflect.d.cts +3 -45
- package/dist/helpers/reflect.d.mts +3 -45
- package/dist/helpers/reflect.mjs +4 -252
- package/dist/helpers/source-file-env.cjs +3 -57
- package/dist/helpers/source-file-env.d.cts +1 -7
- package/dist/helpers/source-file-env.d.mts +1 -7
- package/dist/helpers/source-file-env.mjs +1 -54
- package/dist/helpers/template-helpers.cjs +6 -69
- package/dist/helpers/template-helpers.d.cts +3 -14
- package/dist/helpers/template-helpers.d.mts +3 -14
- package/dist/helpers/template-helpers.mjs +5 -67
- package/dist/helpers-45e1bvAO.mjs +1 -0
- package/dist/helpers-DgYP3uej.cjs +0 -0
- package/dist/index-BNRXMhlr.d.mts +1 -0
- package/dist/index-Bdi8CvaN.d.cts +16 -0
- package/dist/index-Bdi8CvaN.d.cts.map +1 -0
- package/dist/index-CEDY7cmG.d.cts +1 -0
- package/dist/index-CREkvfw9.d.mts +1 -0
- package/dist/index-DSiHnMH2.d.cts +1 -0
- package/dist/index-Drhzdkqe.d.mts +16 -0
- package/dist/index-Drhzdkqe.d.mts.map +1 -0
- package/dist/index-dhjtMp5F.d.mts +1 -0
- package/dist/index-uTS5iDq_.d.cts +1 -0
- package/dist/index.cjs +257 -98
- package/dist/index.d.cts +14 -23
- package/dist/index.d.mts +14 -23
- package/dist/index.mjs +184 -23
- package/dist/index.mjs.map +1 -0
- package/dist/join-paths-BMg51Ddi.mjs +148 -0
- package/dist/join-paths-BMg51Ddi.mjs.map +1 -0
- package/dist/join-paths-Bc4rM2TX.cjs +159 -0
- package/dist/json5-DEV_07Nb.cjs +786 -0
- package/dist/json5-jq90mF9X.mjs +787 -0
- package/dist/json5-jq90mF9X.mjs.map +1 -0
- package/dist/jsonc-CBh70baJ.cjs +4 -0
- package/dist/jsonc-CDLU6bgi.mjs +4 -0
- package/dist/load-DPB0maqs.cjs +6594 -0
- package/dist/load-Dr5ybfL7.mjs +6579 -0
- package/dist/load-Dr5ybfL7.mjs.map +1 -0
- package/dist/load-GpP6cojj.d.mts +36 -0
- package/dist/load-GpP6cojj.d.mts.map +1 -0
- package/dist/load-PHGmxX_X.d.cts +36 -0
- package/dist/load-PHGmxX_X.d.cts.map +1 -0
- package/dist/multipart-parser-D65rtMfY.mjs +176 -0
- package/dist/multipart-parser-D65rtMfY.mjs.map +1 -0
- package/dist/multipart-parser-aEF5a4Xf.cjs +178 -0
- package/dist/node-Co8KdzkZ.cjs +3985 -0
- package/dist/node-D9MigVDD.mjs +3975 -0
- package/dist/node-D9MigVDD.mjs.map +1 -0
- package/dist/persistence-BR4cUaN6.d.cts +85 -0
- package/dist/persistence-BR4cUaN6.d.cts.map +1 -0
- package/dist/persistence-BsBxs9wt.mjs +586 -0
- package/dist/persistence-BsBxs9wt.mjs.map +1 -0
- package/dist/persistence-D_clXRxP.cjs +712 -0
- package/dist/persistence-DrKQZNCv.d.mts +85 -0
- package/dist/persistence-DrKQZNCv.d.mts.map +1 -0
- package/dist/plugin-CM1TSv1B.cjs +159 -0
- package/dist/plugin-CSVnrdpE.cjs +146 -0
- package/dist/plugin-CSe5f2cD.d.cts +155 -0
- package/dist/plugin-CSe5f2cD.d.cts.map +1 -0
- package/dist/plugin-DMbVjdcQ.d.mts +155 -0
- package/dist/plugin-DMbVjdcQ.d.mts.map +1 -0
- package/dist/plugin-Vyvy9w9Z.mjs +141 -0
- package/dist/plugin-Vyvy9w9Z.mjs.map +1 -0
- package/dist/plugin-eBjQJP6x.mjs +130 -0
- package/dist/plugin-eBjQJP6x.mjs.map +1 -0
- package/dist/reflect-Dm8a3c29.d.cts +47 -0
- package/dist/reflect-Dm8a3c29.d.cts.map +1 -0
- package/dist/reflect-Dpz8ifa0.d.mts +47 -0
- package/dist/reflect-Dpz8ifa0.d.mts.map +1 -0
- package/dist/runtime-BDzzR4wH.d.cts +792 -0
- package/dist/runtime-BDzzR4wH.d.cts.map +1 -0
- package/dist/runtime-C5ukCv3P.mjs +242 -0
- package/dist/runtime-C5ukCv3P.mjs.map +1 -0
- package/dist/runtime-g0TEIoZK.cjs +253 -0
- package/dist/runtime-lYSIZdMn.d.mts +792 -0
- package/dist/runtime-lYSIZdMn.d.mts.map +1 -0
- package/dist/source-file-env-4Vdtzc5-.cjs +68 -0
- package/dist/source-file-env-Brfopjyr.d.cts +9 -0
- package/dist/source-file-env-Brfopjyr.d.cts.map +1 -0
- package/dist/source-file-env-DWejSP2U.d.mts +9 -0
- package/dist/source-file-env-DWejSP2U.d.mts.map +1 -0
- package/dist/source-file-env-Tj-6qobx.mjs +57 -0
- package/dist/source-file-env-Tj-6qobx.mjs.map +1 -0
- package/dist/template-helpers-1SKodHKt.d.mts +16 -0
- package/dist/template-helpers-1SKodHKt.d.mts.map +1 -0
- package/dist/template-helpers-CCEjhw1B.mjs +70 -0
- package/dist/template-helpers-CCEjhw1B.mjs.map +1 -0
- package/dist/template-helpers-YVcwxmoF.cjs +75 -0
- package/dist/template-helpers-zyitPfMz.d.cts +16 -0
- package/dist/template-helpers-zyitPfMz.d.cts.map +1 -0
- package/dist/toml-DvrxV201.cjs +657 -0
- package/dist/toml-uuOYvEAO.mjs +658 -0
- package/dist/toml-uuOYvEAO.mjs.map +1 -0
- package/dist/types/index.cjs +10 -9
- package/dist/types/index.d.cts +3 -2
- package/dist/types/index.d.mts +3 -2
- package/dist/types/index.mjs +3 -2
- package/dist/types/plugin.cjs +7 -133
- package/dist/types/plugin.d.cts +2 -153
- package/dist/types/plugin.d.mts +2 -153
- package/dist/types/plugin.mjs +2 -127
- package/dist/types/runtime.cjs +3 -242
- package/dist/types/runtime.d.cts +1 -790
- package/dist/types/runtime.d.mts +1 -790
- package/dist/types/runtime.mjs +1 -239
- package/dist/types-DyPQho_C.mjs +1 -0
- package/dist/types-o3zWarRp.cjs +0 -0
- package/dist/yaml-CIn2Gddw.mjs +1055 -0
- package/dist/yaml-CIn2Gddw.mjs.map +1 -0
- package/dist/yaml-CQSFMRMS.cjs +1054 -0
- package/package.json +9 -9
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"persistence-BsBxs9wt.mjs","names":[],"sources":["../../../node_modules/.pnpm/@stryke+path@0.26.3/node_modules/@stryke/path/dist/is-parent-path.mjs","../src/helpers/reflect.ts","../src/helpers/persistence.ts"],"sourcesContent":["import { slash } from \"./slash.mjs\";\n\n//#region src/is-parent-path.ts\n/**\n* Check if a given path is a parent of another path.\n*\n* @example\n* ```ts\n* isParentPath(\"/home/user/project/src/index.ts\", \"/home/user/project/src\");\n* // returns true\n* isParentPath(\"/home/user/project/src/index.ts\", \"/home/user/project\");\n* // returns true\n* isParentPath(\"/home/user/project/src/index.ts\", \"/home/user/project/src/other\");\n* // returns false\n* isParentPath(\"/home/user/project/src/index.ts\", \"/home/user/other\");\n* // returns false\n* isParentPath(\"/home/user/project/src/index.ts\", \"/home/user/project/src/index.ts\");\n* // returns false\n* ```\n*\n* @param childPath - The path to check if it is a child of the parent path.\n* @param parentPath - The path to check if it is a parent of the child path.\n* @returns `true` if `childPath` is a child of `parentPath`, otherwise `false`.\n*/\nfunction isParentPath(childPath, parentPath) {\n\tconst normalizedChild = slash(childPath.replaceAll(/\\\\/g, \"/\").replace(/\\/*$/, \"\"))?.toLowerCase();\n\tconst normalizedParent = slash(parentPath.replaceAll(/\\\\/g, \"/\").replace(/\\/*$/, \"\"))?.toLowerCase();\n\treturn childPath !== parentPath && normalizedChild !== normalizedParent && normalizedChild.startsWith(`${normalizedParent}/`);\n}\n\n//#endregion\nexport { isParentPath };\n//# sourceMappingURL=is-parent-path.mjs.map","/* -------------------------------------------------------------------\n\n ⚡ Storm Software - Powerlines\n\n This code was released as part of the Powerlines project. Powerlines\n is maintained by Storm Software under the Apache-2.0 license, and is\n free for commercial and private use. For more information, please visit\n our licensing page at https://stormsoftware.com/licenses/projects/powerlines.\n\n Website: https://stormsoftware.com\n Repository: https://github.com/storm-software/powerlines\n Documentation: https://docs.stormsoftware.com/projects/powerlines\n Contact: https://stormsoftware.com/contact\n\n SPDX-License-Identifier: Apache-2.0\n\n ------------------------------------------------------------------- */\n\nimport { reflectType } from \"@powerlines/deepkit/reflect-type\";\nimport {\n merge,\n ReflectionClass,\n ReflectionKind,\n resolveClassType,\n TypeClass,\n TypeObjectLiteral\n} from \"@powerlines/deepkit/vendor/type\";\nimport { isParentPath } from \"@stryke/path/is-parent-path\";\nimport { joinPaths } from \"@stryke/path/join-paths\";\nimport { titleCase } from \"@stryke/string-format/title-case\";\nimport { EnvPluginContext } from \"../types/plugin\";\nimport { EnvInterface, SecretsInterface } from \"../types/runtime\";\nimport {\n getEnvDefaultTypeDefinition,\n getSecretsDefaultTypeDefinition,\n readEnvTypeReflection,\n readSecretsReflection\n} from \"./persistence\";\n\nexport function mergeEnvReflections(\n context: EnvPluginContext,\n reflections: ReflectionClass<any>[]\n): ReflectionClass<any> {\n const reflection = createEnvReflection(context, {\n type: merge(reflections.map(reflection => reflection.type))\n });\n\n return reflection;\n}\n\nexport function mergeSecretsReflections(\n context: EnvPluginContext,\n reflections: ReflectionClass<any>[]\n): ReflectionClass<any> {\n const reflection = createSecretsReflection(context, {\n type: merge(reflections.map(reflection => reflection.type))\n });\n\n return reflection;\n}\n\nexport interface CreateEnvReflectionOptions {\n type?: TypeObjectLiteral | TypeClass;\n superReflection?: ReflectionClass<any>;\n}\n\nexport class BaseEnv implements EnvInterface {\n APP_NAME!: string;\n\n APP_VERSION!: string;\n\n BUILD_ID!: string;\n\n BUILD_TIMESTAMP!: string;\n\n BUILD_CHECKSUM!: string;\n\n RELEASE_ID!: string;\n\n RELEASE_TAG!: string;\n\n ORGANIZATION!: string;\n\n PLATFORM: \"node\" | \"browser\" | \"neutral\" = \"neutral\";\n\n MODE: \"development\" | \"test\" | \"production\" = \"production\";\n\n ENVIRONMENT!: string;\n\n DEBUG: boolean = false;\n\n TEST: boolean = false;\n\n MINIMAL: boolean = false;\n\n NO_COLOR: boolean = false;\n\n FORCE_COLOR: number | boolean = false;\n\n FORCE_HYPERLINK: number | boolean = false;\n\n STACKTRACE: boolean = false;\n\n INCLUDE_ERROR_DATA: boolean = false;\n\n ERROR_URL!: string;\n\n DEFAULT_TIMEZONE!: string;\n\n DEFAULT_LOCALE!: string;\n\n CI: boolean = false;\n}\n\nexport class BaseSecrets implements SecretsInterface {\n ENCRYPTION_KEY!: string;\n}\n\nexport function createEnvReflection(\n context: EnvPluginContext,\n options: CreateEnvReflectionOptions = {}\n): ReflectionClass<any> {\n const parent =\n options.superReflection ??\n new ReflectionClass({\n kind: ReflectionKind.class,\n description: `The base environment configuration definition for the ${titleCase(\n context.config.name\n )} project.`,\n classType: BaseEnv,\n types: [],\n implements: [\n {\n kind: ReflectionKind.objectLiteral,\n typeName: \"EnvInterface\",\n description: `The environment configuration interface definition for the ${titleCase(\n context.config.name\n )} project.`,\n types: []\n }\n ]\n });\n parent.name = \"Env\";\n\n const result = new ReflectionClass(\n options.type ?? {\n kind: ReflectionKind.objectLiteral,\n typeName: \"Env\",\n description: `A schema describing the list of available environment variables that can be used by the ${\n context.config.name\n ? `${titleCase(context.config.name)} application`\n : \"application\"\n }.`,\n types: []\n },\n parent\n );\n result.name = \"Env\";\n\n return result;\n}\n\nexport function createSecretsReflection(\n context: EnvPluginContext,\n options: CreateEnvReflectionOptions = {}\n): ReflectionClass<any> {\n const parent =\n options.superReflection ??\n new ReflectionClass({\n kind: ReflectionKind.class,\n description: `The base secrets configuration definition for the ${titleCase(\n context.config.name\n )} project.`,\n classType: BaseSecrets,\n types: [],\n implements: [\n {\n kind: ReflectionKind.objectLiteral,\n typeName: \"SecretsInterface\",\n description: `The secrets configuration interface definition for the ${titleCase(\n context.config.name\n )} project.`,\n types: []\n }\n ]\n });\n parent.name = \"Secrets\";\n\n const result = new ReflectionClass(\n options.type ?? {\n kind: ReflectionKind.objectLiteral,\n typeName: \"Secrets\",\n description: `A schema describing the list of available environment secrets that can be used by the ${\n context.config.name\n ? `${titleCase(context.config.name)} application`\n : \"application\"\n }.`,\n types: []\n },\n parent\n );\n result.name = \"Secrets\";\n\n return result;\n}\n\nexport async function reflectEnv(\n context: EnvPluginContext,\n file?: string,\n name?: string\n) {\n let config: ReflectionClass<any> | undefined;\n if (file) {\n const configType = await reflectType(context, {\n file: !isParentPath(file, context.workspaceConfig.workspaceRoot)\n ? joinPaths(context.workspaceConfig.workspaceRoot, file)\n : file,\n name\n });\n\n config = resolveClassType(configType);\n }\n\n const defaultConfigType = await reflectType(\n context,\n await getEnvDefaultTypeDefinition(context)\n );\n\n const reflection = await readEnvTypeReflection(context, \"env\");\n\n // const defaultConfig = resolveClassType(defaultConfigType);\n // if (config) {\n // defaultConfig.getProperties().forEach(prop => {\n // if (!config!.hasProperty(prop.getName())) {\n // config!.addProperty(prop.property);\n // }\n // });\n // } else {\n // config = defaultConfig;\n // }\n\n return mergeEnvReflections(\n context,\n [reflection, config, resolveClassType(defaultConfigType)].filter(\n Boolean\n ) as ReflectionClass<any>[]\n );\n}\n\nexport async function reflectSecrets(\n context: EnvPluginContext,\n file?: string,\n name?: string\n) {\n let config: ReflectionClass<any> | undefined;\n if (file) {\n const configType = await reflectType(context, {\n file: !isParentPath(file, context.workspaceConfig.workspaceRoot)\n ? joinPaths(context.workspaceConfig.workspaceRoot, file)\n : file,\n name\n });\n\n config = resolveClassType(configType);\n }\n\n const defaultSecretsType = await reflectType(\n context,\n await getSecretsDefaultTypeDefinition(context)\n );\n\n const reflection = await readSecretsReflection(context);\n\n // const defaultConfig = resolveClassType(defaultConfigType);\n // if (config) {\n // defaultConfig.getProperties().forEach(prop => {\n // if (!config!.hasProperty(prop.getName())) {\n // config!.addProperty(prop.property);\n // }\n // });\n // } else {\n // config = defaultConfig;\n // }\n\n return mergeSecretsReflections(\n context,\n [reflection, config, resolveClassType(defaultSecretsType)].filter(\n Boolean\n ) as ReflectionClass<any>[]\n );\n}\n","/* -------------------------------------------------------------------\n\n ⚡ Storm Software - Powerlines\n\n This code was released as part of the Powerlines project. Powerlines\n is maintained by Storm Software under the Apache-2.0 license, and is\n free for commercial and private use. For more information, please visit\n our licensing page at https://stormsoftware.com/licenses/projects/powerlines.\n\n Website: https://stormsoftware.com\n Repository: https://github.com/storm-software/powerlines\n Documentation: https://docs.stormsoftware.com/projects/powerlines\n Contact: https://stormsoftware.com/contact\n\n SPDX-License-Identifier: Apache-2.0\n\n ------------------------------------------------------------------- */\n\nimport { convertFromCapnp, convertToCapnp } from \"@powerlines/deepkit/capnp\";\nimport { getReflectionsPath } from \"@powerlines/deepkit/resolve-reflections\";\nimport { SerializedTypes } from \"@powerlines/deepkit/schemas/reflection\";\nimport { Reflection } from \"@powerlines/deepkit/types\";\nimport {\n deserializeType,\n ReflectionClass,\n ReflectionKind,\n resolveClassType\n} from \"@powerlines/deepkit/vendor/type\";\nimport * as capnp from \"@stryke/capnp\";\nimport {\n readFileBuffer,\n writeFileBuffer,\n writeFileBufferSync\n} from \"@stryke/fs/buffer\";\nimport { joinPaths } from \"@stryke/path/join-paths\";\nimport { isEmptyObject } from \"@stryke/type-checks/is-empty-object\";\nimport type { TypeDefinition } from \"@stryke/types/configuration\";\nimport { existsSync } from \"node:fs\";\nimport { Context, UnresolvedContext } from \"powerlines/types/context\";\nimport {\n EnvPluginContext,\n EnvPluginResolvedConfig,\n EnvType\n} from \"../types/plugin\";\nimport { createEnvReflection } from \"./reflect\";\n\n/**\n * Resolves the runtime type definition file for the environment variables.\n *\n * @param context - The plugin context.\n * @returns The runtime type definition file for the environment variables.\n */\nexport async function resolveRuntimeTypeFile(\n context: UnresolvedContext<EnvPluginResolvedConfig>\n): Promise<string> {\n const resolved = await context.fs.resolve(\n \"@powerlines/plugin-env/types/runtime\"\n );\n if (!resolved) {\n throw new Error(\n `Failed to resolve the runtime type definition file for the environment variables. Please ensure that the \"@powerlines/plugin-env\" package is installed.`\n );\n }\n\n return resolved;\n}\n\n/**\n * Gets the default type definition for the environment variables.\n *\n * @param context - The plugin context.\n * @returns The default type definition for the environment variables.\n */\nexport async function getEnvDefaultTypeDefinition(\n context: UnresolvedContext<EnvPluginResolvedConfig>\n): Promise<TypeDefinition> {\n return {\n file: await resolveRuntimeTypeFile(context),\n name: \"EnvInterface\"\n };\n}\n\n/** Gets the default type definition for the environment secrets.\n *\n * @param context - The plugin context.\n * @returns The default type definition for the environment secrets.\n */\nexport async function getSecretsDefaultTypeDefinition(\n context: UnresolvedContext<EnvPluginResolvedConfig>\n): Promise<TypeDefinition> {\n return {\n file: await resolveRuntimeTypeFile(context),\n name: \"SecretsInterface\"\n };\n}\n\n/**\n * Gets the path to the environment type reflections.\n *\n * @param context - The plugin context.\n * @param name - The name of the type reflections.\n * @returns The path to the environment type reflections.\n */\nexport function getEnvTypeReflectionsPath(\n context: Context<EnvPluginResolvedConfig>,\n name: EnvType = \"env\"\n): string {\n return joinPaths(getReflectionsPath(context), \"env\", `${name}-types.bin`);\n}\n\n/**\n * Reads the environment type reflection from the file system.\n *\n * @param context - The plugin context.\n * @param name - The name of the type reflections.\n * @returns The environment type reflection.\n */\nexport async function readEnvTypeReflection(\n context: EnvPluginContext,\n name: EnvType = \"env\"\n): Promise<ReflectionClass<any>> {\n const filePath = getEnvTypeReflectionsPath(context, name);\n if (!existsSync(filePath)) {\n if (!context.env.types.env || isEmptyObject(context.env.types.env)) {\n const reflection = createEnvReflection(context) as Reflection;\n\n const message = new capnp.Message();\n reflection.messageRoot = message.initRoot(SerializedTypes);\n reflection.dataBuffer = message.toArrayBuffer();\n\n context.env.types.env = reflection;\n await writeEnvTypeReflection(context, context.env.types.env, name);\n }\n\n return context.env.types.env;\n }\n\n const buffer = await readFileBuffer(filePath);\n const message = new capnp.Message(buffer, false);\n const messageRoot = message.getRoot(SerializedTypes);\n\n const reflection = resolveClassType(\n deserializeType(convertFromCapnp(messageRoot.types))\n );\n\n context.env.types[name] = reflection;\n context.env.types[name].messageRoot = messageRoot;\n context.env.types[name].dataBuffer = buffer;\n\n return reflection;\n}\n\n/**\n * Writes the environment type reflection to the file system.\n *\n * @param context - The plugin context.\n * @param reflection - The environment type reflection to write.\n * @param name - The name of the type reflections.\n */\nexport async function writeEnvTypeReflection(\n context: EnvPluginContext,\n reflection: ReflectionClass<any>,\n name: EnvType = \"env\"\n) {\n const serialized = reflection.serializeType();\n\n const message = new capnp.Message();\n const root = message.initRoot(SerializedTypes);\n\n convertToCapnp(serialized, root._initTypes(serialized.length));\n\n await writeFileBuffer(\n getEnvTypeReflectionsPath(context, name),\n message.toArrayBuffer()\n );\n}\n\nexport function getEnvReflectionsPath(\n context: EnvPluginContext,\n name: EnvType\n): string {\n return joinPaths(getReflectionsPath(context), \"env\", `${name}.bin`);\n}\n\n/**\n * Reads the environment reflection data from the file system.\n *\n * @param context - The plugin context.\n * @returns The environment reflection data.\n */\nexport async function readEnvReflection(\n context: EnvPluginContext\n): Promise<ReflectionClass<any>> {\n const filePath = getEnvReflectionsPath(context, \"env\");\n if (!existsSync(filePath)) {\n if (!context.env.types.env) {\n context.env.types.env = await readEnvTypeReflection(context, \"env\");\n }\n\n if (!context.env.used.env || isEmptyObject(context.env.used.env)) {\n const reflection = createEnvReflection(context, {\n type: {\n kind: ReflectionKind.objectLiteral,\n typeName: \"Env\",\n description: `An object containing the environment configuration parameters that are used (at least once) by the ${\n context.config.name\n ? `${context.config.name} application`\n : \"application\"\n }.`,\n types: []\n },\n superReflection: context.env.types.env\n }) as Reflection;\n reflection.name = \"Env\";\n\n const message = new capnp.Message();\n reflection.messageRoot = message.initRoot(SerializedTypes);\n reflection.dataBuffer = message.toArrayBuffer();\n\n context.env.used.env = reflection;\n await writeEnvReflection(context, context.env.used.env, \"env\");\n }\n\n return context.env.used.env;\n }\n\n const buffer = await readFileBuffer(filePath);\n const message = new capnp.Message(buffer, false);\n const messageRoot = message.getRoot(SerializedTypes);\n\n const reflection = resolveClassType(\n deserializeType(convertFromCapnp(messageRoot.types))\n );\n\n context.env.used.env = reflection;\n context.env.used.env.messageRoot = messageRoot;\n context.env.used.env.dataBuffer = buffer;\n\n return reflection;\n}\n\n/**\n * Reads the secret environment reflection data from the file system.\n *\n * @param context - The plugin context.\n * @returns The environment reflection data.\n */\nexport async function readSecretsReflection(\n context: EnvPluginContext\n): Promise<ReflectionClass<any>> {\n const filePath = getEnvReflectionsPath(context, \"secrets\");\n if (!existsSync(filePath)) {\n if (!context.env.types.secrets) {\n context.env.types.secrets = await readEnvTypeReflection(\n context,\n \"secrets\"\n );\n }\n\n if (!context.env.used.secrets || isEmptyObject(context.env.used.secrets)) {\n const reflection = createEnvReflection(context, {\n type: {\n kind: ReflectionKind.objectLiteral,\n typeName: \"Secrets\",\n description: `An object containing the secret configuration parameters that are used (at least once) by the ${\n context.config.name\n ? `${context.config.name} application`\n : \"application\"\n }.`,\n types: []\n },\n superReflection: context.env.types.secrets\n }) as Reflection;\n reflection.name = \"Secrets\";\n\n const message = new capnp.Message();\n reflection.messageRoot = message.initRoot(SerializedTypes);\n reflection.dataBuffer = message.toArrayBuffer();\n\n context.env.used.secrets = reflection;\n await writeEnvReflection(context, context.env.used.secrets, \"secrets\");\n }\n\n return context.env.used.secrets;\n }\n\n const buffer = await readFileBuffer(filePath);\n const message = new capnp.Message(buffer, false);\n const messageRoot = message.getRoot(SerializedTypes);\n\n const reflection = resolveClassType(\n deserializeType(convertFromCapnp(messageRoot.types))\n );\n\n context.env.used.secrets = reflection;\n context.env.used.secrets.messageRoot = messageRoot;\n context.env.used.secrets.dataBuffer = buffer;\n\n return reflection;\n}\n\n/**\n * Writes the environment reflection data to the file system.\n *\n * @param context - The plugin context.\n * @param reflection - The reflection data to write.\n * @param name - The name of the reflection (either \"env\" or \"secrets\").\n */\nexport async function writeEnvReflection(\n context: EnvPluginContext,\n reflection: ReflectionClass<any>,\n name: EnvType = \"env\"\n) {\n const serialized = reflection.serializeType();\n\n const message = new capnp.Message();\n const root = message.initRoot(SerializedTypes);\n\n convertToCapnp(serialized, root._initTypes(serialized.length));\n\n await writeFileBuffer(\n getEnvReflectionsPath(context, name),\n message.toArrayBuffer()\n );\n}\n\n/**\n * Writes the environment reflection data to the file system.\n *\n * @param context - The plugin context.\n * @param reflection - The reflection data to write.\n * @param name - The name of the reflection (either \"env\" or \"secrets\").\n */\nexport function writeEnvReflectionSync(\n context: EnvPluginContext,\n reflection: ReflectionClass<any>,\n name: EnvType = \"env\"\n) {\n const serialized = reflection.serializeType();\n\n const message = new capnp.Message();\n const root = message.initRoot(SerializedTypes);\n\n convertToCapnp(serialized, root._initTypes(serialized.length));\n\n writeFileBufferSync(\n getEnvReflectionsPath(context, name),\n message.toArrayBuffer()\n );\n}\n"],"x_google_ignoreList":[0],"mappings":"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"}
|