@slicemachine/manager 0.24.15-alpha.jp-update-cr-links-base.1 → 0.24.15-alpha.jp-cr-ui.1

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.
Files changed (193) hide show
  1. package/dist/_node_modules/@amplitude/analytics-core/_node_modules/tslib/tslib.es6.cjs.map +1 -1
  2. package/dist/_node_modules/@amplitude/analytics-core/_node_modules/tslib/tslib.es6.js.map +1 -1
  3. package/dist/_node_modules/@amplitude/analytics-core/lib/esm/plugins/destination.cjs.map +1 -1
  4. package/dist/_node_modules/@amplitude/analytics-core/lib/esm/plugins/destination.js.map +1 -1
  5. package/dist/_node_modules/@amplitude/analytics-core/lib/esm/utils/debug.cjs.map +1 -1
  6. package/dist/_node_modules/@amplitude/analytics-core/lib/esm/utils/debug.js.map +1 -1
  7. package/dist/_node_modules/@amplitude/analytics-core/lib/esm/utils/valid-properties.cjs.map +1 -1
  8. package/dist/_node_modules/@amplitude/analytics-core/lib/esm/utils/valid-properties.js.map +1 -1
  9. package/dist/_node_modules/@amplitude/analytics-node/_node_modules/tslib/tslib.es6.cjs.map +1 -1
  10. package/dist/_node_modules/@amplitude/analytics-node/_node_modules/tslib/tslib.es6.js.map +1 -1
  11. package/dist/_node_modules/@amplitude/analytics-node/lib/esm/transports/http.cjs.map +1 -1
  12. package/dist/_node_modules/@amplitude/analytics-node/lib/esm/transports/http.js.map +1 -1
  13. package/dist/_node_modules/@amplitude/experiment-core/dist/experiment-core.esm.cjs.map +1 -1
  14. package/dist/_node_modules/@amplitude/experiment-core/dist/experiment-core.esm.js.map +1 -1
  15. package/dist/_node_modules/@amplitude/experiment-node-server/dist/src/assignment/assignment-service.cjs.map +1 -1
  16. package/dist/_node_modules/@amplitude/experiment-node-server/dist/src/assignment/assignment-service.js.map +1 -1
  17. package/dist/_node_modules/@amplitude/experiment-node-server/dist/src/assignment/assignment.cjs.map +1 -1
  18. package/dist/_node_modules/@amplitude/experiment-node-server/dist/src/assignment/assignment.js.map +1 -1
  19. package/dist/_node_modules/@amplitude/experiment-node-server/dist/src/cookie.cjs.map +1 -1
  20. package/dist/_node_modules/@amplitude/experiment-node-server/dist/src/cookie.js.map +1 -1
  21. package/dist/_node_modules/@amplitude/experiment-node-server/dist/src/local/cache.cjs.map +1 -1
  22. package/dist/_node_modules/@amplitude/experiment-node-server/dist/src/local/cache.js.map +1 -1
  23. package/dist/_node_modules/@amplitude/experiment-node-server/dist/src/local/client.cjs.map +1 -1
  24. package/dist/_node_modules/@amplitude/experiment-node-server/dist/src/local/client.js.map +1 -1
  25. package/dist/_node_modules/@amplitude/experiment-node-server/dist/src/local/fetcher.cjs.map +1 -1
  26. package/dist/_node_modules/@amplitude/experiment-node-server/dist/src/local/fetcher.js.map +1 -1
  27. package/dist/_node_modules/@amplitude/experiment-node-server/dist/src/local/poller.cjs.map +1 -1
  28. package/dist/_node_modules/@amplitude/experiment-node-server/dist/src/local/poller.js.map +1 -1
  29. package/dist/_node_modules/@amplitude/experiment-node-server/dist/src/remote/client.cjs.map +1 -1
  30. package/dist/_node_modules/@amplitude/experiment-node-server/dist/src/remote/client.js.map +1 -1
  31. package/dist/_node_modules/@amplitude/experiment-node-server/dist/src/transport/http.cjs.map +1 -1
  32. package/dist/_node_modules/@amplitude/experiment-node-server/dist/src/transport/http.js.map +1 -1
  33. package/dist/_node_modules/@amplitude/experiment-node-server/dist/src/util/backoff.cjs.map +1 -1
  34. package/dist/_node_modules/@amplitude/experiment-node-server/dist/src/util/backoff.js.map +1 -1
  35. package/dist/_node_modules/@msgpack/msgpack/dist.es5_esm/Decoder.cjs.map +1 -1
  36. package/dist/_node_modules/@msgpack/msgpack/dist.es5_esm/Decoder.js.map +1 -1
  37. package/dist/_node_modules/cross-spawn/lib/enoent.cjs.map +1 -1
  38. package/dist/_node_modules/cross-spawn/lib/enoent.js.map +1 -1
  39. package/dist/_node_modules/cross-spawn/lib/parse.cjs.map +1 -1
  40. package/dist/_node_modules/cross-spawn/lib/parse.js.map +1 -1
  41. package/dist/_node_modules/cross-spawn/lib/util/escape.cjs.map +1 -1
  42. package/dist/_node_modules/cross-spawn/lib/util/escape.js.map +1 -1
  43. package/dist/_node_modules/cross-spawn/lib/util/readShebang.cjs.map +1 -1
  44. package/dist/_node_modules/cross-spawn/lib/util/readShebang.js.map +1 -1
  45. package/dist/_node_modules/cross-spawn/lib/util/resolveCommand.cjs.map +1 -1
  46. package/dist/_node_modules/cross-spawn/lib/util/resolveCommand.js.map +1 -1
  47. package/dist/_node_modules/data-uri-to-buffer/dist/index.cjs.map +1 -1
  48. package/dist/_node_modules/data-uri-to-buffer/dist/index.js.map +1 -1
  49. package/dist/_node_modules/execa/index.cjs +2 -2
  50. package/dist/_node_modules/execa/index.cjs.map +1 -1
  51. package/dist/_node_modules/execa/index.js +2 -2
  52. package/dist/_node_modules/execa/index.js.map +1 -1
  53. package/dist/_node_modules/execa/lib/command.cjs.map +1 -1
  54. package/dist/_node_modules/execa/lib/command.js.map +1 -1
  55. package/dist/_node_modules/execa/lib/error.cjs.map +1 -1
  56. package/dist/_node_modules/execa/lib/error.js.map +1 -1
  57. package/dist/_node_modules/execa/lib/kill.cjs.map +1 -1
  58. package/dist/_node_modules/execa/lib/kill.js.map +1 -1
  59. package/dist/_node_modules/execa/lib/promise.cjs +2 -2
  60. package/dist/_node_modules/execa/lib/promise.cjs.map +1 -1
  61. package/dist/_node_modules/execa/lib/promise.js +2 -2
  62. package/dist/_node_modules/execa/lib/promise.js.map +1 -1
  63. package/dist/_node_modules/execa/lib/stdio.cjs.map +1 -1
  64. package/dist/_node_modules/execa/lib/stdio.js.map +1 -1
  65. package/dist/_node_modules/execa/lib/stream.cjs.map +1 -1
  66. package/dist/_node_modules/execa/lib/stream.js.map +1 -1
  67. package/dist/_node_modules/execa/lib/verbose.cjs.map +1 -1
  68. package/dist/_node_modules/execa/lib/verbose.js.map +1 -1
  69. package/dist/_node_modules/fetch-blob/file.cjs.map +1 -1
  70. package/dist/_node_modules/fetch-blob/file.js.map +1 -1
  71. package/dist/_node_modules/fetch-blob/index.cjs.map +1 -1
  72. package/dist/_node_modules/fetch-blob/index.js.map +1 -1
  73. package/dist/_node_modules/fetch-blob/streams.cjs.map +1 -1
  74. package/dist/_node_modules/fetch-blob/streams.js.map +1 -1
  75. package/dist/_node_modules/file-type/core.cjs.map +1 -1
  76. package/dist/_node_modules/file-type/core.js.map +1 -1
  77. package/dist/_node_modules/formdata-polyfill/esm.min.cjs.map +1 -1
  78. package/dist/_node_modules/formdata-polyfill/esm.min.js.map +1 -1
  79. package/dist/_node_modules/get-port/index.cjs.map +1 -1
  80. package/dist/_node_modules/get-port/index.js.map +1 -1
  81. package/dist/_node_modules/get-stream/index.cjs.map +1 -1
  82. package/dist/_node_modules/get-stream/index.js.map +1 -1
  83. package/dist/_node_modules/human-signals/build/src/realtime.cjs.map +1 -1
  84. package/dist/_node_modules/human-signals/build/src/realtime.js.map +1 -1
  85. package/dist/_node_modules/isexe/index.cjs.map +1 -1
  86. package/dist/_node_modules/isexe/index.js.map +1 -1
  87. package/dist/_node_modules/mimic-fn/index.cjs.map +1 -1
  88. package/dist/_node_modules/mimic-fn/index.js.map +1 -1
  89. package/dist/_node_modules/node-domexception/index.cjs.map +1 -1
  90. package/dist/_node_modules/node-domexception/index.js.map +1 -1
  91. package/dist/_node_modules/node-fetch/src/body.cjs.map +1 -1
  92. package/dist/_node_modules/node-fetch/src/body.js.map +1 -1
  93. package/dist/_node_modules/node-fetch/src/headers.cjs.map +1 -1
  94. package/dist/_node_modules/node-fetch/src/headers.js.map +1 -1
  95. package/dist/_node_modules/node-fetch/src/index.cjs.map +1 -1
  96. package/dist/_node_modules/node-fetch/src/index.js.map +1 -1
  97. package/dist/_node_modules/node-fetch/src/request.cjs.map +1 -1
  98. package/dist/_node_modules/node-fetch/src/request.js.map +1 -1
  99. package/dist/_node_modules/node-fetch/src/utils/is.cjs.map +1 -1
  100. package/dist/_node_modules/node-fetch/src/utils/is.js.map +1 -1
  101. package/dist/_node_modules/node-fetch/src/utils/multipart-parser.cjs.map +1 -1
  102. package/dist/_node_modules/node-fetch/src/utils/multipart-parser.js.map +1 -1
  103. package/dist/_node_modules/node-fetch/src/utils/referrer.cjs.map +1 -1
  104. package/dist/_node_modules/node-fetch/src/utils/referrer.js.map +1 -1
  105. package/dist/_node_modules/npm-run-path/_node_modules/path-key/index.cjs.map +1 -0
  106. package/dist/_node_modules/npm-run-path/_node_modules/path-key/index.js.map +1 -0
  107. package/dist/_node_modules/{execa/_node_modules/npm-run-path → npm-run-path}/index.cjs +1 -1
  108. package/dist/_node_modules/npm-run-path/index.cjs.map +1 -0
  109. package/dist/_node_modules/{execa/_node_modules/npm-run-path → npm-run-path}/index.js +1 -1
  110. package/dist/_node_modules/npm-run-path/index.js.map +1 -0
  111. package/dist/_node_modules/{execa/_node_modules/onetime → onetime}/index.cjs +1 -1
  112. package/dist/_node_modules/onetime/index.cjs.map +1 -0
  113. package/dist/_node_modules/{execa/_node_modules/onetime → onetime}/index.js +1 -1
  114. package/dist/_node_modules/onetime/index.js.map +1 -0
  115. package/dist/_node_modules/p-limit/index.cjs.map +1 -1
  116. package/dist/_node_modules/p-limit/index.js.map +1 -1
  117. package/dist/_node_modules/r19/dist/handleRPCRequest.cjs.map +1 -1
  118. package/dist/_node_modules/r19/dist/handleRPCRequest.js.map +1 -1
  119. package/dist/_node_modules/shebang-command/index.cjs.map +1 -1
  120. package/dist/_node_modules/shebang-command/index.js.map +1 -1
  121. package/dist/_node_modules/signal-exit/index.cjs.map +1 -1
  122. package/dist/_node_modules/signal-exit/index.js.map +1 -1
  123. package/dist/_node_modules/web-streams-polyfill/dist/ponyfill.es2018.cjs.map +1 -1
  124. package/dist/_node_modules/web-streams-polyfill/dist/ponyfill.es2018.js.map +1 -1
  125. package/dist/_node_modules/which/which.cjs.map +1 -1
  126. package/dist/_node_modules/which/which.js.map +1 -1
  127. package/dist/_node_modules/zod/lib/index.cjs.map +1 -1
  128. package/dist/_node_modules/zod/lib/index.js.map +1 -1
  129. package/dist/_virtual/_commonjsHelpers.cjs +1 -4
  130. package/dist/_virtual/_commonjsHelpers.cjs.map +1 -1
  131. package/dist/_virtual/_commonjsHelpers.js +1 -4
  132. package/dist/_virtual/_commonjsHelpers.js.map +1 -1
  133. package/dist/auth/PrismicAuthManager.cjs.map +1 -1
  134. package/dist/auth/PrismicAuthManager.js.map +1 -1
  135. package/dist/auth/createPrismicAuthManagerMiddleware.cjs.map +1 -1
  136. package/dist/auth/createPrismicAuthManagerMiddleware.js.map +1 -1
  137. package/dist/constants/API_ENDPOINTS.cjs.map +1 -1
  138. package/dist/constants/API_ENDPOINTS.js.map +1 -1
  139. package/dist/constants/API_TOKENS.cjs.map +1 -1
  140. package/dist/constants/API_TOKENS.js.map +1 -1
  141. package/dist/errors.cjs.map +1 -1
  142. package/dist/errors.js.map +1 -1
  143. package/dist/getEnvironmentInfo.cjs.map +1 -1
  144. package/dist/getEnvironmentInfo.js.map +1 -1
  145. package/dist/lib/DecodeError.cjs.map +1 -1
  146. package/dist/lib/DecodeError.js.map +1 -1
  147. package/dist/lib/buildPrismicRepositoryAPIEndpoint.cjs.map +1 -1
  148. package/dist/lib/buildPrismicRepositoryAPIEndpoint.js.map +1 -1
  149. package/dist/lib/fetchGitHubReleaseBodyForRelease.cjs.map +1 -1
  150. package/dist/lib/fetchGitHubReleaseBodyForRelease.js.map +1 -1
  151. package/dist/lib/fetchNPMPackageVersions.cjs.map +1 -1
  152. package/dist/lib/fetchNPMPackageVersions.js.map +1 -1
  153. package/dist/lib/installDependencies.cjs.map +1 -1
  154. package/dist/lib/installDependencies.js.map +1 -1
  155. package/dist/lib/locateFileUpward.cjs.map +1 -1
  156. package/dist/lib/locateFileUpward.js.map +1 -1
  157. package/dist/lib/prismicrc.cjs.map +1 -1
  158. package/dist/lib/prismicrc.js.map +1 -1
  159. package/dist/managers/SliceMachineManager.cjs.map +1 -1
  160. package/dist/managers/SliceMachineManager.js.map +1 -1
  161. package/dist/managers/customTypes/CustomTypesManager.cjs +90 -54
  162. package/dist/managers/customTypes/CustomTypesManager.cjs.map +1 -1
  163. package/dist/managers/customTypes/CustomTypesManager.d.ts +17 -5
  164. package/dist/managers/customTypes/CustomTypesManager.js +90 -54
  165. package/dist/managers/customTypes/CustomTypesManager.js.map +1 -1
  166. package/dist/managers/git/GitManager.cjs.map +1 -1
  167. package/dist/managers/git/GitManager.js.map +1 -1
  168. package/dist/managers/git/buildGitRepoSpecifier.cjs.map +1 -1
  169. package/dist/managers/git/buildGitRepoSpecifier.js.map +1 -1
  170. package/dist/managers/prismicRepository/PrismicRepositoryManager.cjs.map +1 -1
  171. package/dist/managers/prismicRepository/PrismicRepositoryManager.js.map +1 -1
  172. package/dist/managers/project/ProjectManager.cjs.map +1 -1
  173. package/dist/managers/project/ProjectManager.js.map +1 -1
  174. package/dist/managers/screenshots/ScreenshotsManager.cjs.map +1 -1
  175. package/dist/managers/screenshots/ScreenshotsManager.js.map +1 -1
  176. package/dist/managers/sliceTemplateLibrary/SliceTemplateLibraryManager.cjs.map +1 -1
  177. package/dist/managers/sliceTemplateLibrary/SliceTemplateLibraryManager.js.map +1 -1
  178. package/dist/managers/slices/SlicesManager.cjs.map +1 -1
  179. package/dist/managers/slices/SlicesManager.js.map +1 -1
  180. package/dist/managers/telemetry/TelemetryManager.cjs.map +1 -1
  181. package/dist/managers/telemetry/TelemetryManager.js.map +1 -1
  182. package/dist/managers/versions/VersionsManager.cjs.map +1 -1
  183. package/dist/managers/versions/VersionsManager.js.map +1 -1
  184. package/package.json +3 -3
  185. package/src/managers/customTypes/CustomTypesManager.ts +140 -78
  186. package/dist/_node_modules/execa/_node_modules/npm-run-path/index.cjs.map +0 -1
  187. package/dist/_node_modules/execa/_node_modules/npm-run-path/index.js.map +0 -1
  188. package/dist/_node_modules/execa/_node_modules/onetime/index.cjs.map +0 -1
  189. package/dist/_node_modules/execa/_node_modules/onetime/index.js.map +0 -1
  190. package/dist/_node_modules/execa/_node_modules/path-key/index.cjs.map +0 -1
  191. package/dist/_node_modules/execa/_node_modules/path-key/index.js.map +0 -1
  192. /package/dist/_node_modules/{execa → npm-run-path}/_node_modules/path-key/index.cjs +0 -0
  193. /package/dist/_node_modules/{execa → npm-run-path}/_node_modules/path-key/index.js +0 -0
@@ -1 +1 @@
1
- {"version":3,"file":"VersionsManager.cjs","sources":["../../../../src/managers/versions/VersionsManager.ts"],"sourcesContent":["import * as fs from \"node:fs/promises\";\nimport * as path from \"node:path\";\nimport semver from \"semver\";\n\nimport { decodePackageJSON } from \"../../lib/decodePackageJSON\";\nimport {\n\tfetchGitHubReleaseBodyForRelease,\n\tGitHubReleaseMetadata,\n} from \"../../lib/fetchGitHubReleaseBodyForRelease\";\nimport { fetchNPMPackageVersions } from \"../../lib/fetchNPMPackageVersions\";\n\nimport { SLICE_MACHINE_GITHUB_PACKAGE_NAME } from \"../../constants/SLICE_MACHINE_GITHUB_PACKAGE_NAME\";\nimport { SLICE_MACHINE_GITHUB_REPOSITORY_NAME } from \"../../constants/SLICE_MACHINE_GITHUB_REPOSITORY_NAME\";\nimport { SLICE_MACHINE_GITHUB_REPOSITORY_ORGANIZATION } from \"../../constants/SLICE_MACHINE_GITHUB_REPOSITORY_ORGANIZATION\";\nimport { SLICE_MACHINE_NPM_PACKAGE_NAME } from \"../../constants/SLICE_MACHINE_NPM_PACKAGE_NAME\";\nimport { VERSION_KIND } from \"../../constants/VERSION_KIND\";\n\nimport { BaseManager } from \"../BaseManager\";\n\nimport { Version } from \"./types\";\n\nconst detectVersionBumpKind = (\n\tto: string,\n\tfrom?: string,\n): (typeof VERSION_KIND)[keyof typeof VERSION_KIND] | undefined => {\n\tif (!from) {\n\t\treturn VERSION_KIND.FIRST;\n\t}\n\n\tif (semver.eq(to, from)) {\n\t\treturn undefined;\n\t} else if (semver.satisfies(to, `~${from}`)) {\n\t\treturn VERSION_KIND.PATCH;\n\t} else if (semver.satisfies(to, `^${from}`)) {\n\t\treturn VERSION_KIND.MINOR;\n\t} else {\n\t\treturn VERSION_KIND.MAJOR;\n\t}\n};\n\nconst filterStableVersions = (versions: string[]): string[] => {\n\treturn versions.filter((version) => {\n\t\t// Exclude tagged versions (e.g. `1.0.0-alpha.0`).\n\t\t// Exclude versions < 0.1.0 (e.g. `0.0.1`).\n\t\treturn (\n\t\t\t/^[1-9]\\d*\\.\\d+\\.\\d+$/.test(version) ||\n\t\t\t/^\\d+\\.[1-9]\\d*\\.\\d+$/.test(version)\n\t\t);\n\t});\n};\n\nconst readPackageJSON = async (packageDir: string) => {\n\tconst packageJSONContents = await fs.readFile(\n\t\tpath.join(packageDir, \"package.json\"),\n\t\t\"utf8\",\n\t);\n\n\tlet packageJSON: unknown;\n\ttry {\n\t\tpackageJSON = JSON.parse(packageJSONContents);\n\t} catch {\n\t\t// noop\n\t}\n\n\tconst { value, error } = decodePackageJSON(packageJSON);\n\n\tif (error) {\n\t\tthrow new Error(\n\t\t\t`Invalid ${packageDir} \\`package.json\\` file. ${error.errors.join(\", \")}`,\n\t\t);\n\t}\n\n\treturn value;\n};\n\ntype SliceMachineManagerGetReleaseNotesForVersionArgs = {\n\tversion: string;\n};\n\nexport class VersionsManager extends BaseManager {\n\t/**\n\t * Record of version numbers mapped to their GitHub release metadata.\n\t */\n\tgitHubSliceMachineReleaseMetadataCache: Record<\n\t\tstring,\n\t\tGitHubReleaseMetadata | undefined\n\t> = {};\n\n\tasync getRunningSliceMachineVersion(): Promise<string> {\n\t\tconst sliceMachineDir = await this.project.locateSliceMachineUIDir();\n\t\tconst packageJSON = await readPackageJSON(sliceMachineDir);\n\n\t\treturn packageJSON.version;\n\t}\n\n\tasync getAllStableSliceMachineVersions(): Promise<string[]> {\n\t\tconst versions = await fetchNPMPackageVersions({\n\t\t\tpackageName: SLICE_MACHINE_NPM_PACKAGE_NAME,\n\t\t});\n\t\tconst filteredVersions = filterStableVersions(versions);\n\n\t\treturn semver.rsort(filteredVersions);\n\t}\n\n\tasync getAllStableSliceMachineVersionsWithKind(): Promise<Version[]> {\n\t\tconst versions = await this.getAllStableSliceMachineVersions();\n\n\t\treturn versions.map((version, i) => {\n\t\t\tconst previousVersion = versions[i + 1];\n\n\t\t\treturn {\n\t\t\t\tversion,\n\t\t\t\tkind: detectVersionBumpKind(version, previousVersion),\n\t\t\t};\n\t\t});\n\t}\n\n\tasync getLatestNonBreakingSliceMachineVersion(): Promise<string | undefined> {\n\t\tconst versions = await this.getAllStableSliceMachineVersions();\n\t\tconst currentVersion = await this.getRunningSliceMachineVersion();\n\n\t\treturn semver.maxSatisfying(versions, `^${currentVersion}`) ?? undefined;\n\t}\n\n\tasync checkIsSliceMachineUpdateAvailable(): Promise<boolean> {\n\t\tconst versions = await this.getAllStableSliceMachineVersions();\n\t\tconst currentVersion = await this.getRunningSliceMachineVersion();\n\n\t\treturn semver.gt(versions[0], currentVersion);\n\t}\n\n\tasync getRunningAdapterVersion(): Promise<string> {\n\t\tconst adapterDir = await this.project.locateAdapterDir();\n\t\tconst value = await readPackageJSON(adapterDir);\n\n\t\treturn value.version;\n\t}\n\n\tasync getAllStableAdapterVersions(): Promise<string[]> {\n\t\tconst adapterName = await this.project.getAdapterName();\n\t\tconst versions = await fetchNPMPackageVersions({\n\t\t\tpackageName: adapterName,\n\t\t});\n\t\tconst filteredVersions = filterStableVersions(versions);\n\n\t\treturn semver.rsort(filteredVersions);\n\t}\n\n\tasync checkIsAdapterUpdateAvailable(): Promise<boolean> {\n\t\tconst versions = await this.getAllStableAdapterVersions();\n\t\tconst currentVersion = await this.getRunningAdapterVersion();\n\n\t\treturn semver.gt(versions[0], currentVersion);\n\t}\n\n\tasync getSliceMachineReleaseNotesForVersion(\n\t\targs: SliceMachineManagerGetReleaseNotesForVersionArgs,\n\t): Promise<string | undefined> {\n\t\treturn await fetchGitHubReleaseBodyForRelease({\n\t\t\trepositoryOwner: SLICE_MACHINE_GITHUB_REPOSITORY_ORGANIZATION,\n\t\t\trepositoryName: SLICE_MACHINE_GITHUB_REPOSITORY_NAME,\n\t\t\tpackageName: SLICE_MACHINE_GITHUB_PACKAGE_NAME,\n\t\t\tversion: args.version,\n\t\t\tcache: this.gitHubSliceMachineReleaseMetadataCache,\n\t\t});\n\t}\n}\n"],"names":["VERSION_KIND","fs","path","decodePackageJSON","BaseManager","fetchNPMPackageVersions","SLICE_MACHINE_NPM_PACKAGE_NAME","fetchGitHubReleaseBodyForRelease","SLICE_MACHINE_GITHUB_REPOSITORY_ORGANIZATION","SLICE_MACHINE_GITHUB_REPOSITORY_NAME","SLICE_MACHINE_GITHUB_PACKAGE_NAME"],"mappings":"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"}
1
+ {"version":3,"file":"VersionsManager.cjs","sources":["../../../../src/managers/versions/VersionsManager.ts"],"sourcesContent":["import * as fs from \"node:fs/promises\";\nimport * as path from \"node:path\";\nimport semver from \"semver\";\n\nimport { decodePackageJSON } from \"../../lib/decodePackageJSON\";\nimport {\n\tfetchGitHubReleaseBodyForRelease,\n\tGitHubReleaseMetadata,\n} from \"../../lib/fetchGitHubReleaseBodyForRelease\";\nimport { fetchNPMPackageVersions } from \"../../lib/fetchNPMPackageVersions\";\n\nimport { SLICE_MACHINE_GITHUB_PACKAGE_NAME } from \"../../constants/SLICE_MACHINE_GITHUB_PACKAGE_NAME\";\nimport { SLICE_MACHINE_GITHUB_REPOSITORY_NAME } from \"../../constants/SLICE_MACHINE_GITHUB_REPOSITORY_NAME\";\nimport { SLICE_MACHINE_GITHUB_REPOSITORY_ORGANIZATION } from \"../../constants/SLICE_MACHINE_GITHUB_REPOSITORY_ORGANIZATION\";\nimport { SLICE_MACHINE_NPM_PACKAGE_NAME } from \"../../constants/SLICE_MACHINE_NPM_PACKAGE_NAME\";\nimport { VERSION_KIND } from \"../../constants/VERSION_KIND\";\n\nimport { BaseManager } from \"../BaseManager\";\n\nimport { Version } from \"./types\";\n\nconst detectVersionBumpKind = (\n\tto: string,\n\tfrom?: string,\n): (typeof VERSION_KIND)[keyof typeof VERSION_KIND] | undefined => {\n\tif (!from) {\n\t\treturn VERSION_KIND.FIRST;\n\t}\n\n\tif (semver.eq(to, from)) {\n\t\treturn undefined;\n\t} else if (semver.satisfies(to, `~${from}`)) {\n\t\treturn VERSION_KIND.PATCH;\n\t} else if (semver.satisfies(to, `^${from}`)) {\n\t\treturn VERSION_KIND.MINOR;\n\t} else {\n\t\treturn VERSION_KIND.MAJOR;\n\t}\n};\n\nconst filterStableVersions = (versions: string[]): string[] => {\n\treturn versions.filter((version) => {\n\t\t// Exclude tagged versions (e.g. `1.0.0-alpha.0`).\n\t\t// Exclude versions < 0.1.0 (e.g. `0.0.1`).\n\t\treturn (\n\t\t\t/^[1-9]\\d*\\.\\d+\\.\\d+$/.test(version) ||\n\t\t\t/^\\d+\\.[1-9]\\d*\\.\\d+$/.test(version)\n\t\t);\n\t});\n};\n\nconst readPackageJSON = async (packageDir: string) => {\n\tconst packageJSONContents = await fs.readFile(\n\t\tpath.join(packageDir, \"package.json\"),\n\t\t\"utf8\",\n\t);\n\n\tlet packageJSON: unknown;\n\ttry {\n\t\tpackageJSON = JSON.parse(packageJSONContents);\n\t} catch {\n\t\t// noop\n\t}\n\n\tconst { value, error } = decodePackageJSON(packageJSON);\n\n\tif (error) {\n\t\tthrow new Error(\n\t\t\t`Invalid ${packageDir} \\`package.json\\` file. ${error.errors.join(\", \")}`,\n\t\t);\n\t}\n\n\treturn value;\n};\n\ntype SliceMachineManagerGetReleaseNotesForVersionArgs = {\n\tversion: string;\n};\n\nexport class VersionsManager extends BaseManager {\n\t/**\n\t * Record of version numbers mapped to their GitHub release metadata.\n\t */\n\tgitHubSliceMachineReleaseMetadataCache: Record<\n\t\tstring,\n\t\tGitHubReleaseMetadata | undefined\n\t> = {};\n\n\tasync getRunningSliceMachineVersion(): Promise<string> {\n\t\tconst sliceMachineDir = await this.project.locateSliceMachineUIDir();\n\t\tconst packageJSON = await readPackageJSON(sliceMachineDir);\n\n\t\treturn packageJSON.version;\n\t}\n\n\tasync getAllStableSliceMachineVersions(): Promise<string[]> {\n\t\tconst versions = await fetchNPMPackageVersions({\n\t\t\tpackageName: SLICE_MACHINE_NPM_PACKAGE_NAME,\n\t\t});\n\t\tconst filteredVersions = filterStableVersions(versions);\n\n\t\treturn semver.rsort(filteredVersions);\n\t}\n\n\tasync getAllStableSliceMachineVersionsWithKind(): Promise<Version[]> {\n\t\tconst versions = await this.getAllStableSliceMachineVersions();\n\n\t\treturn versions.map((version, i) => {\n\t\t\tconst previousVersion = versions[i + 1];\n\n\t\t\treturn {\n\t\t\t\tversion,\n\t\t\t\tkind: detectVersionBumpKind(version, previousVersion),\n\t\t\t};\n\t\t});\n\t}\n\n\tasync getLatestNonBreakingSliceMachineVersion(): Promise<string | undefined> {\n\t\tconst versions = await this.getAllStableSliceMachineVersions();\n\t\tconst currentVersion = await this.getRunningSliceMachineVersion();\n\n\t\treturn semver.maxSatisfying(versions, `^${currentVersion}`) ?? undefined;\n\t}\n\n\tasync checkIsSliceMachineUpdateAvailable(): Promise<boolean> {\n\t\tconst versions = await this.getAllStableSliceMachineVersions();\n\t\tconst currentVersion = await this.getRunningSliceMachineVersion();\n\n\t\treturn semver.gt(versions[0], currentVersion);\n\t}\n\n\tasync getRunningAdapterVersion(): Promise<string> {\n\t\tconst adapterDir = await this.project.locateAdapterDir();\n\t\tconst value = await readPackageJSON(adapterDir);\n\n\t\treturn value.version;\n\t}\n\n\tasync getAllStableAdapterVersions(): Promise<string[]> {\n\t\tconst adapterName = await this.project.getAdapterName();\n\t\tconst versions = await fetchNPMPackageVersions({\n\t\t\tpackageName: adapterName,\n\t\t});\n\t\tconst filteredVersions = filterStableVersions(versions);\n\n\t\treturn semver.rsort(filteredVersions);\n\t}\n\n\tasync checkIsAdapterUpdateAvailable(): Promise<boolean> {\n\t\tconst versions = await this.getAllStableAdapterVersions();\n\t\tconst currentVersion = await this.getRunningAdapterVersion();\n\n\t\treturn semver.gt(versions[0], currentVersion);\n\t}\n\n\tasync getSliceMachineReleaseNotesForVersion(\n\t\targs: SliceMachineManagerGetReleaseNotesForVersionArgs,\n\t): Promise<string | undefined> {\n\t\treturn await fetchGitHubReleaseBodyForRelease({\n\t\t\trepositoryOwner: SLICE_MACHINE_GITHUB_REPOSITORY_ORGANIZATION,\n\t\t\trepositoryName: SLICE_MACHINE_GITHUB_REPOSITORY_NAME,\n\t\t\tpackageName: SLICE_MACHINE_GITHUB_PACKAGE_NAME,\n\t\t\tversion: args.version,\n\t\t\tcache: this.gitHubSliceMachineReleaseMetadataCache,\n\t\t});\n\t}\n}\n"],"names":["VERSION_KIND","fs","path","decodePackageJSON","BaseManager","fetchNPMPackageVersions","SLICE_MACHINE_NPM_PACKAGE_NAME","fetchGitHubReleaseBodyForRelease","SLICE_MACHINE_GITHUB_REPOSITORY_ORGANIZATION","SLICE_MACHINE_GITHUB_REPOSITORY_NAME","SLICE_MACHINE_GITHUB_PACKAGE_NAME"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"VersionsManager.js","sources":["../../../../src/managers/versions/VersionsManager.ts"],"sourcesContent":["import * as fs from \"node:fs/promises\";\nimport * as path from \"node:path\";\nimport semver from \"semver\";\n\nimport { decodePackageJSON } from \"../../lib/decodePackageJSON\";\nimport {\n\tfetchGitHubReleaseBodyForRelease,\n\tGitHubReleaseMetadata,\n} from \"../../lib/fetchGitHubReleaseBodyForRelease\";\nimport { fetchNPMPackageVersions } from \"../../lib/fetchNPMPackageVersions\";\n\nimport { SLICE_MACHINE_GITHUB_PACKAGE_NAME } from \"../../constants/SLICE_MACHINE_GITHUB_PACKAGE_NAME\";\nimport { SLICE_MACHINE_GITHUB_REPOSITORY_NAME } from \"../../constants/SLICE_MACHINE_GITHUB_REPOSITORY_NAME\";\nimport { SLICE_MACHINE_GITHUB_REPOSITORY_ORGANIZATION } from \"../../constants/SLICE_MACHINE_GITHUB_REPOSITORY_ORGANIZATION\";\nimport { SLICE_MACHINE_NPM_PACKAGE_NAME } from \"../../constants/SLICE_MACHINE_NPM_PACKAGE_NAME\";\nimport { VERSION_KIND } from \"../../constants/VERSION_KIND\";\n\nimport { BaseManager } from \"../BaseManager\";\n\nimport { Version } from \"./types\";\n\nconst detectVersionBumpKind = (\n\tto: string,\n\tfrom?: string,\n): (typeof VERSION_KIND)[keyof typeof VERSION_KIND] | undefined => {\n\tif (!from) {\n\t\treturn VERSION_KIND.FIRST;\n\t}\n\n\tif (semver.eq(to, from)) {\n\t\treturn undefined;\n\t} else if (semver.satisfies(to, `~${from}`)) {\n\t\treturn VERSION_KIND.PATCH;\n\t} else if (semver.satisfies(to, `^${from}`)) {\n\t\treturn VERSION_KIND.MINOR;\n\t} else {\n\t\treturn VERSION_KIND.MAJOR;\n\t}\n};\n\nconst filterStableVersions = (versions: string[]): string[] => {\n\treturn versions.filter((version) => {\n\t\t// Exclude tagged versions (e.g. `1.0.0-alpha.0`).\n\t\t// Exclude versions < 0.1.0 (e.g. `0.0.1`).\n\t\treturn (\n\t\t\t/^[1-9]\\d*\\.\\d+\\.\\d+$/.test(version) ||\n\t\t\t/^\\d+\\.[1-9]\\d*\\.\\d+$/.test(version)\n\t\t);\n\t});\n};\n\nconst readPackageJSON = async (packageDir: string) => {\n\tconst packageJSONContents = await fs.readFile(\n\t\tpath.join(packageDir, \"package.json\"),\n\t\t\"utf8\",\n\t);\n\n\tlet packageJSON: unknown;\n\ttry {\n\t\tpackageJSON = JSON.parse(packageJSONContents);\n\t} catch {\n\t\t// noop\n\t}\n\n\tconst { value, error } = decodePackageJSON(packageJSON);\n\n\tif (error) {\n\t\tthrow new Error(\n\t\t\t`Invalid ${packageDir} \\`package.json\\` file. ${error.errors.join(\", \")}`,\n\t\t);\n\t}\n\n\treturn value;\n};\n\ntype SliceMachineManagerGetReleaseNotesForVersionArgs = {\n\tversion: string;\n};\n\nexport class VersionsManager extends BaseManager {\n\t/**\n\t * Record of version numbers mapped to their GitHub release metadata.\n\t */\n\tgitHubSliceMachineReleaseMetadataCache: Record<\n\t\tstring,\n\t\tGitHubReleaseMetadata | undefined\n\t> = {};\n\n\tasync getRunningSliceMachineVersion(): Promise<string> {\n\t\tconst sliceMachineDir = await this.project.locateSliceMachineUIDir();\n\t\tconst packageJSON = await readPackageJSON(sliceMachineDir);\n\n\t\treturn packageJSON.version;\n\t}\n\n\tasync getAllStableSliceMachineVersions(): Promise<string[]> {\n\t\tconst versions = await fetchNPMPackageVersions({\n\t\t\tpackageName: SLICE_MACHINE_NPM_PACKAGE_NAME,\n\t\t});\n\t\tconst filteredVersions = filterStableVersions(versions);\n\n\t\treturn semver.rsort(filteredVersions);\n\t}\n\n\tasync getAllStableSliceMachineVersionsWithKind(): Promise<Version[]> {\n\t\tconst versions = await this.getAllStableSliceMachineVersions();\n\n\t\treturn versions.map((version, i) => {\n\t\t\tconst previousVersion = versions[i + 1];\n\n\t\t\treturn {\n\t\t\t\tversion,\n\t\t\t\tkind: detectVersionBumpKind(version, previousVersion),\n\t\t\t};\n\t\t});\n\t}\n\n\tasync getLatestNonBreakingSliceMachineVersion(): Promise<string | undefined> {\n\t\tconst versions = await this.getAllStableSliceMachineVersions();\n\t\tconst currentVersion = await this.getRunningSliceMachineVersion();\n\n\t\treturn semver.maxSatisfying(versions, `^${currentVersion}`) ?? undefined;\n\t}\n\n\tasync checkIsSliceMachineUpdateAvailable(): Promise<boolean> {\n\t\tconst versions = await this.getAllStableSliceMachineVersions();\n\t\tconst currentVersion = await this.getRunningSliceMachineVersion();\n\n\t\treturn semver.gt(versions[0], currentVersion);\n\t}\n\n\tasync getRunningAdapterVersion(): Promise<string> {\n\t\tconst adapterDir = await this.project.locateAdapterDir();\n\t\tconst value = await readPackageJSON(adapterDir);\n\n\t\treturn value.version;\n\t}\n\n\tasync getAllStableAdapterVersions(): Promise<string[]> {\n\t\tconst adapterName = await this.project.getAdapterName();\n\t\tconst versions = await fetchNPMPackageVersions({\n\t\t\tpackageName: adapterName,\n\t\t});\n\t\tconst filteredVersions = filterStableVersions(versions);\n\n\t\treturn semver.rsort(filteredVersions);\n\t}\n\n\tasync checkIsAdapterUpdateAvailable(): Promise<boolean> {\n\t\tconst versions = await this.getAllStableAdapterVersions();\n\t\tconst currentVersion = await this.getRunningAdapterVersion();\n\n\t\treturn semver.gt(versions[0], currentVersion);\n\t}\n\n\tasync getSliceMachineReleaseNotesForVersion(\n\t\targs: SliceMachineManagerGetReleaseNotesForVersionArgs,\n\t): Promise<string | undefined> {\n\t\treturn await fetchGitHubReleaseBodyForRelease({\n\t\t\trepositoryOwner: SLICE_MACHINE_GITHUB_REPOSITORY_ORGANIZATION,\n\t\t\trepositoryName: SLICE_MACHINE_GITHUB_REPOSITORY_NAME,\n\t\t\tpackageName: SLICE_MACHINE_GITHUB_PACKAGE_NAME,\n\t\t\tversion: args.version,\n\t\t\tcache: this.gitHubSliceMachineReleaseMetadataCache,\n\t\t});\n\t}\n}\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"VersionsManager.js","sources":["../../../../src/managers/versions/VersionsManager.ts"],"sourcesContent":["import * as fs from \"node:fs/promises\";\nimport * as path from \"node:path\";\nimport semver from \"semver\";\n\nimport { decodePackageJSON } from \"../../lib/decodePackageJSON\";\nimport {\n\tfetchGitHubReleaseBodyForRelease,\n\tGitHubReleaseMetadata,\n} from \"../../lib/fetchGitHubReleaseBodyForRelease\";\nimport { fetchNPMPackageVersions } from \"../../lib/fetchNPMPackageVersions\";\n\nimport { SLICE_MACHINE_GITHUB_PACKAGE_NAME } from \"../../constants/SLICE_MACHINE_GITHUB_PACKAGE_NAME\";\nimport { SLICE_MACHINE_GITHUB_REPOSITORY_NAME } from \"../../constants/SLICE_MACHINE_GITHUB_REPOSITORY_NAME\";\nimport { SLICE_MACHINE_GITHUB_REPOSITORY_ORGANIZATION } from \"../../constants/SLICE_MACHINE_GITHUB_REPOSITORY_ORGANIZATION\";\nimport { SLICE_MACHINE_NPM_PACKAGE_NAME } from \"../../constants/SLICE_MACHINE_NPM_PACKAGE_NAME\";\nimport { VERSION_KIND } from \"../../constants/VERSION_KIND\";\n\nimport { BaseManager } from \"../BaseManager\";\n\nimport { Version } from \"./types\";\n\nconst detectVersionBumpKind = (\n\tto: string,\n\tfrom?: string,\n): (typeof VERSION_KIND)[keyof typeof VERSION_KIND] | undefined => {\n\tif (!from) {\n\t\treturn VERSION_KIND.FIRST;\n\t}\n\n\tif (semver.eq(to, from)) {\n\t\treturn undefined;\n\t} else if (semver.satisfies(to, `~${from}`)) {\n\t\treturn VERSION_KIND.PATCH;\n\t} else if (semver.satisfies(to, `^${from}`)) {\n\t\treturn VERSION_KIND.MINOR;\n\t} else {\n\t\treturn VERSION_KIND.MAJOR;\n\t}\n};\n\nconst filterStableVersions = (versions: string[]): string[] => {\n\treturn versions.filter((version) => {\n\t\t// Exclude tagged versions (e.g. `1.0.0-alpha.0`).\n\t\t// Exclude versions < 0.1.0 (e.g. `0.0.1`).\n\t\treturn (\n\t\t\t/^[1-9]\\d*\\.\\d+\\.\\d+$/.test(version) ||\n\t\t\t/^\\d+\\.[1-9]\\d*\\.\\d+$/.test(version)\n\t\t);\n\t});\n};\n\nconst readPackageJSON = async (packageDir: string) => {\n\tconst packageJSONContents = await fs.readFile(\n\t\tpath.join(packageDir, \"package.json\"),\n\t\t\"utf8\",\n\t);\n\n\tlet packageJSON: unknown;\n\ttry {\n\t\tpackageJSON = JSON.parse(packageJSONContents);\n\t} catch {\n\t\t// noop\n\t}\n\n\tconst { value, error } = decodePackageJSON(packageJSON);\n\n\tif (error) {\n\t\tthrow new Error(\n\t\t\t`Invalid ${packageDir} \\`package.json\\` file. ${error.errors.join(\", \")}`,\n\t\t);\n\t}\n\n\treturn value;\n};\n\ntype SliceMachineManagerGetReleaseNotesForVersionArgs = {\n\tversion: string;\n};\n\nexport class VersionsManager extends BaseManager {\n\t/**\n\t * Record of version numbers mapped to their GitHub release metadata.\n\t */\n\tgitHubSliceMachineReleaseMetadataCache: Record<\n\t\tstring,\n\t\tGitHubReleaseMetadata | undefined\n\t> = {};\n\n\tasync getRunningSliceMachineVersion(): Promise<string> {\n\t\tconst sliceMachineDir = await this.project.locateSliceMachineUIDir();\n\t\tconst packageJSON = await readPackageJSON(sliceMachineDir);\n\n\t\treturn packageJSON.version;\n\t}\n\n\tasync getAllStableSliceMachineVersions(): Promise<string[]> {\n\t\tconst versions = await fetchNPMPackageVersions({\n\t\t\tpackageName: SLICE_MACHINE_NPM_PACKAGE_NAME,\n\t\t});\n\t\tconst filteredVersions = filterStableVersions(versions);\n\n\t\treturn semver.rsort(filteredVersions);\n\t}\n\n\tasync getAllStableSliceMachineVersionsWithKind(): Promise<Version[]> {\n\t\tconst versions = await this.getAllStableSliceMachineVersions();\n\n\t\treturn versions.map((version, i) => {\n\t\t\tconst previousVersion = versions[i + 1];\n\n\t\t\treturn {\n\t\t\t\tversion,\n\t\t\t\tkind: detectVersionBumpKind(version, previousVersion),\n\t\t\t};\n\t\t});\n\t}\n\n\tasync getLatestNonBreakingSliceMachineVersion(): Promise<string | undefined> {\n\t\tconst versions = await this.getAllStableSliceMachineVersions();\n\t\tconst currentVersion = await this.getRunningSliceMachineVersion();\n\n\t\treturn semver.maxSatisfying(versions, `^${currentVersion}`) ?? undefined;\n\t}\n\n\tasync checkIsSliceMachineUpdateAvailable(): Promise<boolean> {\n\t\tconst versions = await this.getAllStableSliceMachineVersions();\n\t\tconst currentVersion = await this.getRunningSliceMachineVersion();\n\n\t\treturn semver.gt(versions[0], currentVersion);\n\t}\n\n\tasync getRunningAdapterVersion(): Promise<string> {\n\t\tconst adapterDir = await this.project.locateAdapterDir();\n\t\tconst value = await readPackageJSON(adapterDir);\n\n\t\treturn value.version;\n\t}\n\n\tasync getAllStableAdapterVersions(): Promise<string[]> {\n\t\tconst adapterName = await this.project.getAdapterName();\n\t\tconst versions = await fetchNPMPackageVersions({\n\t\t\tpackageName: adapterName,\n\t\t});\n\t\tconst filteredVersions = filterStableVersions(versions);\n\n\t\treturn semver.rsort(filteredVersions);\n\t}\n\n\tasync checkIsAdapterUpdateAvailable(): Promise<boolean> {\n\t\tconst versions = await this.getAllStableAdapterVersions();\n\t\tconst currentVersion = await this.getRunningAdapterVersion();\n\n\t\treturn semver.gt(versions[0], currentVersion);\n\t}\n\n\tasync getSliceMachineReleaseNotesForVersion(\n\t\targs: SliceMachineManagerGetReleaseNotesForVersionArgs,\n\t): Promise<string | undefined> {\n\t\treturn await fetchGitHubReleaseBodyForRelease({\n\t\t\trepositoryOwner: SLICE_MACHINE_GITHUB_REPOSITORY_ORGANIZATION,\n\t\t\trepositoryName: SLICE_MACHINE_GITHUB_REPOSITORY_NAME,\n\t\t\tpackageName: SLICE_MACHINE_GITHUB_PACKAGE_NAME,\n\t\t\tversion: args.version,\n\t\t\tcache: this.gitHubSliceMachineReleaseMetadataCache,\n\t\t});\n\t}\n}\n"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@slicemachine/manager",
3
- "version": "0.24.15-alpha.jp-update-cr-links-base.1",
3
+ "version": "0.24.15-alpha.jp-cr-ui.1",
4
4
  "description": "Manage all aspects of a Slice Machine project.",
5
5
  "repository": {
6
6
  "type": "git",
@@ -70,7 +70,7 @@
70
70
  "@prismicio/mocks": "2.13.0",
71
71
  "@prismicio/types-internal": "3.10.0",
72
72
  "@segment/analytics-node": "^2.1.2",
73
- "@slicemachine/plugin-kit": "0.4.77-alpha.jp-update-cr-links-base.1",
73
+ "@slicemachine/plugin-kit": "0.4.77-alpha.jp-cr-ui.1",
74
74
  "cookie": "^1.0.1",
75
75
  "cors": "^2.8.5",
76
76
  "execa": "^7.1.1",
@@ -113,7 +113,7 @@
113
113
  "prettier-plugin-jsdoc": "1.1.1",
114
114
  "size-limit": "8.2.4",
115
115
  "typescript": "4.9.5",
116
- "vite": "4.3.9",
116
+ "vite": "4.5.14",
117
117
  "vite-plugin-sdk": "0.1.1",
118
118
  "vitest": "0.32.0"
119
119
  },
@@ -88,9 +88,14 @@ type CustomTypesMachineManagerDeleteCustomTypeReturnType = {
88
88
  errors: (DecodeError | HookError)[];
89
89
  };
90
90
 
91
- type CustomTypeFieldIdChangedMeta = NonNullable<
92
- NonNullable<CustomTypeUpdateHookData["updateMeta"]>["fieldIdChanged"]
93
- >;
91
+ type CustomTypesMachineManagerUpdateCustomTypeReturnType = {
92
+ errors: (DecodeError | HookError)[];
93
+ };
94
+
95
+ type CustomTypeFieldIdChangedMeta = {
96
+ previousPath: string[];
97
+ newPath: string[];
98
+ };
94
99
 
95
100
  type CrCustomType =
96
101
  | string
@@ -193,72 +198,95 @@ export class CustomTypesManager extends BaseManager {
193
198
  * property.
194
199
  */
195
200
  private async updateContentRelationships(
196
- args: CustomTypeUpdateHookData,
197
- ): Promise<OnlyHookErrors<CallHookReturnType<CustomTypeUpdateHook>>> {
201
+ args: { model: CustomType } & CustomTypeFieldIdChangedMeta,
202
+ ): Promise<
203
+ OnlyHookErrors<CallHookReturnType<CustomTypeUpdateHook>> & {
204
+ rollback?: () => Promise<void>;
205
+ }
206
+ > {
198
207
  assertPluginsInitialized(this.sliceMachinePluginRunner);
199
208
 
200
- const { model, updateMeta } = args;
201
-
202
- if (updateMeta?.fieldIdChanged) {
203
- let { previousPath, newPath } = updateMeta.fieldIdChanged;
204
-
205
- if (previousPath.join(".") !== newPath.join(".")) {
206
- previousPath = [model.id, ...previousPath];
207
- newPath = [model.id, ...newPath];
209
+ const { model } = args;
210
+ let { newPath, previousPath } = args;
211
+
212
+ if (previousPath.join(".") !== newPath.join(".")) {
213
+ previousPath = [model.id, ...previousPath];
214
+ newPath = [model.id, ...newPath];
215
+
216
+ const crUpdates: {
217
+ updatePromise: Promise<{ errors: HookError[] }>;
218
+ rollback: () => void;
219
+ }[] = [];
220
+
221
+ // Find existing content relationships that link to the renamed field id in
222
+ // any custom type and update them to use the new one.
223
+ const customTypes = await this.readAllCustomTypes();
224
+
225
+ updateCustomTypeContentRelationships({
226
+ models: customTypes.models,
227
+ onUpdate: ({ previousModel, model: updatedModel }) => {
228
+ assertPluginsInitialized(this.sliceMachinePluginRunner);
229
+
230
+ crUpdates.push({
231
+ updatePromise: this.sliceMachinePluginRunner?.callHook(
232
+ "custom-type:update",
233
+ { model: updatedModel },
234
+ ),
235
+ rollback: () => {
236
+ this.sliceMachinePluginRunner?.callHook("custom-type:update", {
237
+ model: previousModel,
238
+ });
239
+ },
240
+ });
241
+ },
242
+ previousPath,
243
+ newPath,
244
+ });
208
245
 
209
- const crUpdates: Promise<{ errors: HookError[] }>[] = [];
246
+ // Find existing slice with content relationships that link to the renamed
247
+ // field id in all libraries and update them to use the new one.
248
+ const { libraries } = await this.slices.readAllSliceLibraries();
210
249
 
211
- // Find existing content relationships that link to the renamed field id in
212
- // any custom type and update them to use the new one.
213
- const customTypes = await this.readAllCustomTypes();
250
+ for (const library of libraries) {
251
+ const slices = await this.slices.readAllSlicesForLibrary({
252
+ libraryID: library.libraryID,
253
+ });
214
254
 
215
- updateCustomTypeContentRelationships({
216
- models: customTypes.models,
217
- onUpdate: (model) => {
218
- pushIfDefined(
219
- crUpdates,
220
- this.sliceMachinePluginRunner?.callHook("custom-type:update", {
221
- model,
222
- }),
223
- );
255
+ updateSharedSliceContentRelationships({
256
+ models: slices.models,
257
+ onUpdate: ({ previousModel, model: updatedModel }) => {
258
+ assertPluginsInitialized(this.sliceMachinePluginRunner);
259
+
260
+ crUpdates.push({
261
+ updatePromise: this.sliceMachinePluginRunner?.callHook(
262
+ "slice:update",
263
+ { libraryID: library.libraryID, model: updatedModel },
264
+ ),
265
+ rollback: () => {
266
+ this.sliceMachinePluginRunner?.callHook("slice:update", {
267
+ libraryID: library.libraryID,
268
+ model: previousModel,
269
+ });
270
+ },
271
+ });
224
272
  },
225
273
  previousPath,
226
274
  newPath,
227
275
  });
276
+ }
228
277
 
229
- // Find existing slice with content relationships that link to the renamed
230
- // field id in all libraries and update them to use the new one.
231
- const { libraries } = await this.slices.readAllSliceLibraries();
232
-
233
- for (const library of libraries) {
234
- const slices = await this.slices.readAllSlicesForLibrary({
235
- libraryID: library.libraryID,
236
- });
237
-
238
- updateSharedSliceContentRelationships({
239
- models: slices.models,
240
- onUpdate: (model) => {
241
- pushIfDefined(
242
- crUpdates,
243
- this.sliceMachinePluginRunner?.callHook("slice:update", {
244
- libraryID: library.libraryID,
245
- model,
246
- }),
247
- );
248
- },
249
- previousPath,
250
- newPath,
251
- });
252
- }
253
-
254
- // Process all the Content Relationship updates at once.
255
- const crUpdatesResult = await Promise.all(crUpdates);
278
+ // Process all the Content Relationship updates at once.
279
+ const crUpdatesResult = await Promise.all(
280
+ crUpdates.map((update) => update.updatePromise),
281
+ );
256
282
 
257
- if (crUpdatesResult.some((result) => result.errors.length > 0)) {
258
- return {
259
- errors: crUpdatesResult.flatMap((result) => result.errors),
260
- };
261
- }
283
+ if (crUpdatesResult.some((result) => result.errors.length > 0)) {
284
+ return {
285
+ errors: crUpdatesResult.flatMap((result) => result.errors),
286
+ rollback: async () => {
287
+ await Promise.all(crUpdates.map((update) => update.rollback()));
288
+ },
289
+ };
262
290
  }
263
291
  }
264
292
 
@@ -267,19 +295,56 @@ export class CustomTypesManager extends BaseManager {
267
295
 
268
296
  async updateCustomType(
269
297
  args: CustomTypeUpdateHookData,
270
- ): Promise<OnlyHookErrors<CallHookReturnType<CustomTypeUpdateHook>>> {
298
+ ): Promise<CustomTypesMachineManagerUpdateCustomTypeReturnType> {
271
299
  assertPluginsInitialized(this.sliceMachinePluginRunner);
300
+ const { model } = args;
301
+ const { fieldIdChanged } = args.updateMeta ?? {};
272
302
 
273
- const hookResult = await this.sliceMachinePluginRunner.callHook(
303
+ let previousCustomType: CustomType | undefined;
304
+
305
+ if (fieldIdChanged) {
306
+ const customTypeRead = await this.readCustomType({ id: model.id });
307
+
308
+ if (customTypeRead.errors.length > 0) {
309
+ return { errors: customTypeRead.errors };
310
+ }
311
+ if (!customTypeRead.model) {
312
+ throw new Error(
313
+ `readCustomType succeeded reading custom type ${model.id} but model is undefined.`,
314
+ );
315
+ }
316
+
317
+ previousCustomType = customTypeRead.model;
318
+ }
319
+
320
+ const customTypeUpdateResult = await this.sliceMachinePluginRunner.callHook(
274
321
  "custom-type:update",
275
- args,
322
+ { model },
276
323
  );
277
324
 
278
- if (args.updateMeta?.fieldIdChanged) {
279
- await this.updateContentRelationships(args);
325
+ if (customTypeUpdateResult.errors.length > 0) {
326
+ return { errors: customTypeUpdateResult.errors };
280
327
  }
281
328
 
282
- return { errors: hookResult.errors };
329
+ if (previousCustomType && fieldIdChanged) {
330
+ const crUpdateResult = await this.updateContentRelationships({
331
+ ...fieldIdChanged,
332
+ model: previousCustomType,
333
+ });
334
+
335
+ if (crUpdateResult.errors.length > 0) {
336
+ // put the previous custom type back
337
+ await this.sliceMachinePluginRunner?.callHook("custom-type:update", {
338
+ model: previousCustomType,
339
+ });
340
+ // revert the content relationships updates
341
+ await crUpdateResult.rollback?.();
342
+
343
+ return { errors: crUpdateResult.errors };
344
+ }
345
+ }
346
+
347
+ return { errors: [] };
283
348
  }
284
349
 
285
350
  async renameCustomType(
@@ -620,13 +685,13 @@ function updateFieldContentRelationships<
620
685
  export function updateCustomTypeContentRelationships(
621
686
  args: {
622
687
  models: { model: CustomType }[];
623
- onUpdate: (model: CustomType) => void;
688
+ onUpdate: (model: { previousModel: CustomType; model: CustomType }) => void;
624
689
  } & CustomTypeFieldIdChangedMeta,
625
690
  ): void {
626
691
  const { models, previousPath, newPath, onUpdate } = args;
627
692
 
628
693
  for (const { model: customType } of models) {
629
- const updatedCustomTypeModel = traverseCustomType({
694
+ const updatedCustomType = traverseCustomType({
630
695
  customType,
631
696
  onField: ({ field }) => {
632
697
  return updateFieldContentRelationships({
@@ -637,8 +702,8 @@ export function updateCustomTypeContentRelationships(
637
702
  },
638
703
  });
639
704
 
640
- if (!isEqualModel(customType, updatedCustomTypeModel)) {
641
- onUpdate(updatedCustomTypeModel);
705
+ if (!isEqualModel(customType, updatedCustomType)) {
706
+ onUpdate({ model: updatedCustomType, previousModel: customType });
642
707
  }
643
708
  }
644
709
  }
@@ -646,13 +711,16 @@ export function updateCustomTypeContentRelationships(
646
711
  export function updateSharedSliceContentRelationships(
647
712
  args: {
648
713
  models: { model: SharedSlice }[];
649
- onUpdate: (model: SharedSlice) => void;
714
+ onUpdate: (model: {
715
+ previousModel: SharedSlice;
716
+ model: SharedSlice;
717
+ }) => void;
650
718
  } & CustomTypeFieldIdChangedMeta,
651
719
  ): void {
652
720
  const { models, previousPath, newPath, onUpdate } = args;
653
721
 
654
722
  for (const { model: slice } of models) {
655
- const updatedSliceModel = traverseSharedSlice({
723
+ const updateSlice = traverseSharedSlice({
656
724
  path: ["."],
657
725
  slice,
658
726
  onField: ({ field }) => {
@@ -664,8 +732,8 @@ export function updateSharedSliceContentRelationships(
664
732
  },
665
733
  });
666
734
 
667
- if (!isEqualModel(slice, updatedSliceModel)) {
668
- onUpdate(updatedSliceModel);
735
+ if (!isEqualModel(slice, updateSlice)) {
736
+ onUpdate({ model: updateSlice, previousModel: slice });
669
737
  }
670
738
  }
671
739
  }
@@ -684,9 +752,3 @@ function shallowCloneIfObject<T>(value: T): T {
684
752
 
685
753
  return value;
686
754
  }
687
-
688
- function pushIfDefined<T>(array: T[], value: T | undefined) {
689
- if (value) {
690
- array.push(value);
691
- }
692
- }
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.cjs","sources":["../../../../../../../node_modules/execa/node_modules/npm-run-path/index.js"],"sourcesContent":["import process from 'node:process';\nimport path from 'node:path';\nimport url from 'node:url';\nimport pathKey from 'path-key';\n\nexport function npmRunPath(options = {}) {\n\tconst {\n\t\tcwd = process.cwd(),\n\t\tpath: path_ = process.env[pathKey()],\n\t\texecPath = process.execPath,\n\t} = options;\n\n\tlet previous;\n\tconst cwdString = cwd instanceof URL ? url.fileURLToPath(cwd) : cwd;\n\tlet cwdPath = path.resolve(cwdString);\n\tconst result = [];\n\n\twhile (previous !== cwdPath) {\n\t\tresult.push(path.join(cwdPath, 'node_modules/.bin'));\n\t\tprevious = cwdPath;\n\t\tcwdPath = path.resolve(cwdPath, '..');\n\t}\n\n\t// Ensure the running `node` binary is used.\n\tresult.push(path.resolve(cwdString, execPath, '..'));\n\n\treturn [...result, path_].join(path.delimiter);\n}\n\nexport function npmRunPathEnv({env = process.env, ...options} = {}) {\n\tenv = {...env};\n\n\tconst path = pathKey({env});\n\toptions.path = env[path];\n\tenv[path] = npmRunPath(options);\n\n\treturn env;\n}\n"],"names":["pathKey","path"],"mappings":";;;;;;AAKO,SAAS,WAAW,UAAU,IAAI;AACxC,QAAM;AAAA,IACL,MAAM,QAAQ,IAAK;AAAA,IACnB,MAAM,QAAQ,QAAQ,IAAIA,MAAO,CAAE;AAAA,IACnC,WAAW,QAAQ;AAAA,EACnB,IAAG;AAEJ,MAAI;AACJ,QAAM,YAAY,eAAe,MAAM,IAAI,cAAc,GAAG,IAAI;AAChE,MAAI,UAAU,KAAK,QAAQ,SAAS;AACpC,QAAM,SAAS,CAAA;AAEf,SAAO,aAAa,SAAS;AAC5B,WAAO,KAAK,KAAK,KAAK,SAAS,mBAAmB,CAAC;AACnD,eAAW;AACX,cAAU,KAAK,QAAQ,SAAS,IAAI;AAAA,EACpC;AAGD,SAAO,KAAK,KAAK,QAAQ,WAAW,UAAU,IAAI,CAAC;AAEnD,SAAO,CAAC,GAAG,QAAQ,KAAK,EAAE,KAAK,KAAK,SAAS;AAC9C;AAEO,SAAS,cAAc,EAAC,MAAM,QAAQ,KAAK,GAAG,QAAO,IAAI,IAAI;AACnE,QAAM,EAAC,GAAG,IAAG;AAEb,QAAMC,QAAOD,MAAQ,EAAC,IAAG,CAAC;AAC1B,UAAQ,OAAO,IAAIC,KAAI;AACvB,MAAIA,KAAI,IAAI,WAAW,OAAO;AAE9B,SAAO;AACR;;;","x_google_ignoreList":[0]}
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.js","sources":["../../../../../../../node_modules/execa/node_modules/npm-run-path/index.js"],"sourcesContent":["import process from 'node:process';\nimport path from 'node:path';\nimport url from 'node:url';\nimport pathKey from 'path-key';\n\nexport function npmRunPath(options = {}) {\n\tconst {\n\t\tcwd = process.cwd(),\n\t\tpath: path_ = process.env[pathKey()],\n\t\texecPath = process.execPath,\n\t} = options;\n\n\tlet previous;\n\tconst cwdString = cwd instanceof URL ? url.fileURLToPath(cwd) : cwd;\n\tlet cwdPath = path.resolve(cwdString);\n\tconst result = [];\n\n\twhile (previous !== cwdPath) {\n\t\tresult.push(path.join(cwdPath, 'node_modules/.bin'));\n\t\tprevious = cwdPath;\n\t\tcwdPath = path.resolve(cwdPath, '..');\n\t}\n\n\t// Ensure the running `node` binary is used.\n\tresult.push(path.resolve(cwdString, execPath, '..'));\n\n\treturn [...result, path_].join(path.delimiter);\n}\n\nexport function npmRunPathEnv({env = process.env, ...options} = {}) {\n\tenv = {...env};\n\n\tconst path = pathKey({env});\n\toptions.path = env[path];\n\tenv[path] = npmRunPath(options);\n\n\treturn env;\n}\n"],"names":["path"],"mappings":";;;;AAKO,SAAS,WAAW,UAAU,IAAI;AACxC,QAAM;AAAA,IACL,MAAM,QAAQ,IAAK;AAAA,IACnB,MAAM,QAAQ,QAAQ,IAAI,QAAO,CAAE;AAAA,IACnC,WAAW,QAAQ;AAAA,EACnB,IAAG;AAEJ,MAAI;AACJ,QAAM,YAAY,eAAe,MAAM,IAAI,cAAc,GAAG,IAAI;AAChE,MAAI,UAAUA,cAAK,QAAQ,SAAS;AACpC,QAAM,SAAS,CAAA;AAEf,SAAO,aAAa,SAAS;AAC5B,WAAO,KAAKA,cAAK,KAAK,SAAS,mBAAmB,CAAC;AACnD,eAAW;AACX,cAAUA,cAAK,QAAQ,SAAS,IAAI;AAAA,EACpC;AAGD,SAAO,KAAKA,cAAK,QAAQ,WAAW,UAAU,IAAI,CAAC;AAEnD,SAAO,CAAC,GAAG,QAAQ,KAAK,EAAE,KAAKA,cAAK,SAAS;AAC9C;AAEO,SAAS,cAAc,EAAC,MAAM,QAAQ,KAAK,GAAG,QAAO,IAAI,IAAI;AACnE,QAAM,EAAC,GAAG,IAAG;AAEb,QAAM,OAAO,QAAQ,EAAC,IAAG,CAAC;AAC1B,UAAQ,OAAO,IAAI,IAAI;AACvB,MAAI,IAAI,IAAI,WAAW,OAAO;AAE9B,SAAO;AACR;","x_google_ignoreList":[0]}
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.cjs","sources":["../../../../../../../node_modules/execa/node_modules/onetime/index.js"],"sourcesContent":["import mimicFunction from 'mimic-fn';\n\nconst calledFunctions = new WeakMap();\n\nconst onetime = (function_, options = {}) => {\n\tif (typeof function_ !== 'function') {\n\t\tthrow new TypeError('Expected a function');\n\t}\n\n\tlet returnValue;\n\tlet callCount = 0;\n\tconst functionName = function_.displayName || function_.name || '<anonymous>';\n\n\tconst onetime = function (...arguments_) {\n\t\tcalledFunctions.set(onetime, ++callCount);\n\n\t\tif (callCount === 1) {\n\t\t\treturnValue = function_.apply(this, arguments_);\n\t\t\tfunction_ = null;\n\t\t} else if (options.throw === true) {\n\t\t\tthrow new Error(`Function \\`${functionName}\\` can only be called once`);\n\t\t}\n\n\t\treturn returnValue;\n\t};\n\n\tmimicFunction(onetime, function_);\n\tcalledFunctions.set(onetime, callCount);\n\n\treturn onetime;\n};\n\nonetime.callCount = function_ => {\n\tif (!calledFunctions.has(function_)) {\n\t\tthrow new Error(`The given function \\`${function_.name}\\` is not wrapped by the \\`onetime\\` package`);\n\t}\n\n\treturn calledFunctions.get(function_);\n};\n\nexport default onetime;\n"],"names":["onetime","mimicFunction"],"mappings":";;AAEA,MAAM,kBAAkB,oBAAI;AAEvB,MAAC,UAAU,CAAC,WAAW,UAAU,OAAO;AAC5C,MAAI,OAAO,cAAc,YAAY;AACpC,UAAM,IAAI,UAAU,qBAAqB;AAAA,EACzC;AAED,MAAI;AACJ,MAAI,YAAY;AAChB,QAAM,eAAe,UAAU,eAAe,UAAU,QAAQ;AAEhE,QAAMA,WAAU,YAAa,YAAY;AACxC,oBAAgB,IAAIA,UAAS,EAAE,SAAS;AAExC,QAAI,cAAc,GAAG;AACpB,oBAAc,UAAU,MAAM,MAAM,UAAU;AAC9C,kBAAY;AAAA,IACf,WAAa,QAAQ,UAAU,MAAM;AAClC,YAAM,IAAI,MAAM,cAAc,wCAAwC;AAAA,IACtE;AAED,WAAO;AAAA,EACT;AAECC,QAAcD,UAAS,SAAS;AAChC,kBAAgB,IAAIA,UAAS,SAAS;AAEtC,SAAOA;AACR;AAEA,QAAQ,YAAY,eAAa;AAChC,MAAI,CAAC,gBAAgB,IAAI,SAAS,GAAG;AACpC,UAAM,IAAI,MAAM,wBAAwB,UAAU,kDAAkD;AAAA,EACpG;AAED,SAAO,gBAAgB,IAAI,SAAS;AACrC;;","x_google_ignoreList":[0]}
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.js","sources":["../../../../../../../node_modules/execa/node_modules/onetime/index.js"],"sourcesContent":["import mimicFunction from 'mimic-fn';\n\nconst calledFunctions = new WeakMap();\n\nconst onetime = (function_, options = {}) => {\n\tif (typeof function_ !== 'function') {\n\t\tthrow new TypeError('Expected a function');\n\t}\n\n\tlet returnValue;\n\tlet callCount = 0;\n\tconst functionName = function_.displayName || function_.name || '<anonymous>';\n\n\tconst onetime = function (...arguments_) {\n\t\tcalledFunctions.set(onetime, ++callCount);\n\n\t\tif (callCount === 1) {\n\t\t\treturnValue = function_.apply(this, arguments_);\n\t\t\tfunction_ = null;\n\t\t} else if (options.throw === true) {\n\t\t\tthrow new Error(`Function \\`${functionName}\\` can only be called once`);\n\t\t}\n\n\t\treturn returnValue;\n\t};\n\n\tmimicFunction(onetime, function_);\n\tcalledFunctions.set(onetime, callCount);\n\n\treturn onetime;\n};\n\nonetime.callCount = function_ => {\n\tif (!calledFunctions.has(function_)) {\n\t\tthrow new Error(`The given function \\`${function_.name}\\` is not wrapped by the \\`onetime\\` package`);\n\t}\n\n\treturn calledFunctions.get(function_);\n};\n\nexport default onetime;\n"],"names":["onetime"],"mappings":";AAEA,MAAM,kBAAkB,oBAAI;AAEvB,MAAC,UAAU,CAAC,WAAW,UAAU,OAAO;AAC5C,MAAI,OAAO,cAAc,YAAY;AACpC,UAAM,IAAI,UAAU,qBAAqB;AAAA,EACzC;AAED,MAAI;AACJ,MAAI,YAAY;AAChB,QAAM,eAAe,UAAU,eAAe,UAAU,QAAQ;AAEhE,QAAMA,WAAU,YAAa,YAAY;AACxC,oBAAgB,IAAIA,UAAS,EAAE,SAAS;AAExC,QAAI,cAAc,GAAG;AACpB,oBAAc,UAAU,MAAM,MAAM,UAAU;AAC9C,kBAAY;AAAA,IACf,WAAa,QAAQ,UAAU,MAAM;AAClC,YAAM,IAAI,MAAM,cAAc,wCAAwC;AAAA,IACtE;AAED,WAAO;AAAA,EACT;AAEC,gBAAcA,UAAS,SAAS;AAChC,kBAAgB,IAAIA,UAAS,SAAS;AAEtC,SAAOA;AACR;AAEA,QAAQ,YAAY,eAAa;AAChC,MAAI,CAAC,gBAAgB,IAAI,SAAS,GAAG;AACpC,UAAM,IAAI,MAAM,wBAAwB,UAAU,kDAAkD;AAAA,EACpG;AAED,SAAO,gBAAgB,IAAI,SAAS;AACrC;","x_google_ignoreList":[0]}
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.cjs","sources":["../../../../../../../node_modules/execa/node_modules/path-key/index.js"],"sourcesContent":["export default function pathKey(options = {}) {\n\tconst {\n\t\tenv = process.env,\n\t\tplatform = process.platform\n\t} = options;\n\n\tif (platform !== 'win32') {\n\t\treturn 'PATH';\n\t}\n\n\treturn Object.keys(env).reverse().find(key => key.toUpperCase() === 'PATH') || 'Path';\n}\n"],"names":[],"mappings":";AAAe,SAAS,QAAQ,UAAU,IAAI;AAC7C,QAAM;AAAA,IACL,MAAM,QAAQ;AAAA,IACd,WAAW,QAAQ;AAAA,EACnB,IAAG;AAEJ,MAAI,aAAa,SAAS;AACzB,WAAO;AAAA,EACP;AAED,SAAO,OAAO,KAAK,GAAG,EAAE,QAAO,EAAG,KAAK,SAAO,IAAI,YAAW,MAAO,MAAM,KAAK;AAChF;;","x_google_ignoreList":[0]}
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.js","sources":["../../../../../../../node_modules/execa/node_modules/path-key/index.js"],"sourcesContent":["export default function pathKey(options = {}) {\n\tconst {\n\t\tenv = process.env,\n\t\tplatform = process.platform\n\t} = options;\n\n\tif (platform !== 'win32') {\n\t\treturn 'PATH';\n\t}\n\n\treturn Object.keys(env).reverse().find(key => key.toUpperCase() === 'PATH') || 'Path';\n}\n"],"names":[],"mappings":"AAAe,SAAS,QAAQ,UAAU,IAAI;AAC7C,QAAM;AAAA,IACL,MAAM,QAAQ;AAAA,IACd,WAAW,QAAQ;AAAA,EACnB,IAAG;AAEJ,MAAI,aAAa,SAAS;AACzB,WAAO;AAAA,EACP;AAED,SAAO,OAAO,KAAK,GAAG,EAAE,QAAO,EAAG,KAAK,SAAO,IAAI,YAAW,MAAO,MAAM,KAAK;AAChF;","x_google_ignoreList":[0]}