@slicemachine/manager 0.24.15-beta.1 → 0.24.15-beta.11

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 (205) 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 +1 -1
  24. package/dist/_node_modules/@amplitude/experiment-node-server/dist/src/local/client.cjs.map +1 -1
  25. package/dist/_node_modules/@amplitude/experiment-node-server/dist/src/local/client.js +1 -1
  26. package/dist/_node_modules/@amplitude/experiment-node-server/dist/src/local/client.js.map +1 -1
  27. package/dist/_node_modules/@amplitude/experiment-node-server/dist/src/local/fetcher.cjs.map +1 -1
  28. package/dist/_node_modules/@amplitude/experiment-node-server/dist/src/local/fetcher.js.map +1 -1
  29. package/dist/_node_modules/@amplitude/experiment-node-server/dist/src/local/poller.cjs.map +1 -1
  30. package/dist/_node_modules/@amplitude/experiment-node-server/dist/src/local/poller.js.map +1 -1
  31. package/dist/_node_modules/@amplitude/experiment-node-server/dist/src/remote/client.cjs.map +1 -1
  32. package/dist/_node_modules/@amplitude/experiment-node-server/dist/src/remote/client.js.map +1 -1
  33. package/dist/_node_modules/@amplitude/experiment-node-server/dist/src/transport/http.cjs.map +1 -1
  34. package/dist/_node_modules/@amplitude/experiment-node-server/dist/src/transport/http.js.map +1 -1
  35. package/dist/_node_modules/@amplitude/experiment-node-server/dist/src/util/backoff.cjs.map +1 -1
  36. package/dist/_node_modules/@amplitude/experiment-node-server/dist/src/util/backoff.js.map +1 -1
  37. package/dist/_node_modules/@msgpack/msgpack/dist.es5_esm/Decoder.cjs.map +1 -1
  38. package/dist/_node_modules/@msgpack/msgpack/dist.es5_esm/Decoder.js.map +1 -1
  39. package/dist/_node_modules/cross-spawn/index.cjs +1 -1
  40. package/dist/_node_modules/cross-spawn/index.js +1 -1
  41. package/dist/_node_modules/cross-spawn/lib/enoent.cjs.map +1 -1
  42. package/dist/_node_modules/cross-spawn/lib/enoent.js.map +1 -1
  43. package/dist/_node_modules/cross-spawn/lib/parse.cjs.map +1 -1
  44. package/dist/_node_modules/cross-spawn/lib/parse.js.map +1 -1
  45. package/dist/_node_modules/cross-spawn/lib/util/escape.cjs.map +1 -1
  46. package/dist/_node_modules/cross-spawn/lib/util/escape.js.map +1 -1
  47. package/dist/_node_modules/cross-spawn/lib/util/readShebang.cjs.map +1 -1
  48. package/dist/_node_modules/cross-spawn/lib/util/readShebang.js.map +1 -1
  49. package/dist/_node_modules/cross-spawn/lib/util/resolveCommand.cjs.map +1 -1
  50. package/dist/_node_modules/cross-spawn/lib/util/resolveCommand.js.map +1 -1
  51. package/dist/_node_modules/data-uri-to-buffer/dist/index.cjs.map +1 -1
  52. package/dist/_node_modules/data-uri-to-buffer/dist/index.js.map +1 -1
  53. package/dist/_node_modules/execa/index.cjs +2 -2
  54. package/dist/_node_modules/execa/index.cjs.map +1 -1
  55. package/dist/_node_modules/execa/index.js +2 -2
  56. package/dist/_node_modules/execa/index.js.map +1 -1
  57. package/dist/_node_modules/execa/lib/command.cjs.map +1 -1
  58. package/dist/_node_modules/execa/lib/command.js.map +1 -1
  59. package/dist/_node_modules/execa/lib/error.cjs.map +1 -1
  60. package/dist/_node_modules/execa/lib/error.js.map +1 -1
  61. package/dist/_node_modules/execa/lib/kill.cjs.map +1 -1
  62. package/dist/_node_modules/execa/lib/kill.js.map +1 -1
  63. package/dist/_node_modules/execa/lib/promise.cjs +2 -2
  64. package/dist/_node_modules/execa/lib/promise.cjs.map +1 -1
  65. package/dist/_node_modules/execa/lib/promise.js +2 -2
  66. package/dist/_node_modules/execa/lib/promise.js.map +1 -1
  67. package/dist/_node_modules/execa/lib/stdio.cjs.map +1 -1
  68. package/dist/_node_modules/execa/lib/stdio.js.map +1 -1
  69. package/dist/_node_modules/execa/lib/stream.cjs.map +1 -1
  70. package/dist/_node_modules/execa/lib/stream.js.map +1 -1
  71. package/dist/_node_modules/execa/lib/verbose.cjs.map +1 -1
  72. package/dist/_node_modules/execa/lib/verbose.js.map +1 -1
  73. package/dist/_node_modules/fetch-blob/file.cjs.map +1 -1
  74. package/dist/_node_modules/fetch-blob/file.js.map +1 -1
  75. package/dist/_node_modules/fetch-blob/index.cjs.map +1 -1
  76. package/dist/_node_modules/fetch-blob/index.js.map +1 -1
  77. package/dist/_node_modules/fetch-blob/streams.cjs.map +1 -1
  78. package/dist/_node_modules/fetch-blob/streams.js.map +1 -1
  79. package/dist/_node_modules/file-type/core.cjs.map +1 -1
  80. package/dist/_node_modules/file-type/core.js.map +1 -1
  81. package/dist/_node_modules/formdata-polyfill/esm.min.cjs.map +1 -1
  82. package/dist/_node_modules/formdata-polyfill/esm.min.js.map +1 -1
  83. package/dist/_node_modules/get-port/index.cjs.map +1 -1
  84. package/dist/_node_modules/get-port/index.js.map +1 -1
  85. package/dist/_node_modules/get-stream/index.cjs.map +1 -1
  86. package/dist/_node_modules/get-stream/index.js.map +1 -1
  87. package/dist/_node_modules/human-signals/build/src/realtime.cjs.map +1 -1
  88. package/dist/_node_modules/human-signals/build/src/realtime.js.map +1 -1
  89. package/dist/_node_modules/isexe/index.cjs.map +1 -1
  90. package/dist/_node_modules/isexe/index.js.map +1 -1
  91. package/dist/_node_modules/mimic-fn/index.cjs.map +1 -1
  92. package/dist/_node_modules/mimic-fn/index.js.map +1 -1
  93. package/dist/_node_modules/node-domexception/index.cjs.map +1 -1
  94. package/dist/_node_modules/node-domexception/index.js.map +1 -1
  95. package/dist/_node_modules/node-fetch/src/body.cjs.map +1 -1
  96. package/dist/_node_modules/node-fetch/src/body.js.map +1 -1
  97. package/dist/_node_modules/node-fetch/src/headers.cjs.map +1 -1
  98. package/dist/_node_modules/node-fetch/src/headers.js.map +1 -1
  99. package/dist/_node_modules/node-fetch/src/index.cjs.map +1 -1
  100. package/dist/_node_modules/node-fetch/src/index.js.map +1 -1
  101. package/dist/_node_modules/node-fetch/src/request.cjs.map +1 -1
  102. package/dist/_node_modules/node-fetch/src/request.js.map +1 -1
  103. package/dist/_node_modules/node-fetch/src/utils/is.cjs.map +1 -1
  104. package/dist/_node_modules/node-fetch/src/utils/is.js.map +1 -1
  105. package/dist/_node_modules/node-fetch/src/utils/multipart-parser.cjs.map +1 -1
  106. package/dist/_node_modules/node-fetch/src/utils/multipart-parser.js.map +1 -1
  107. package/dist/_node_modules/node-fetch/src/utils/referrer.cjs.map +1 -1
  108. package/dist/_node_modules/node-fetch/src/utils/referrer.js.map +1 -1
  109. package/dist/_node_modules/npm-run-path/_node_modules/path-key/index.cjs.map +1 -0
  110. package/dist/_node_modules/npm-run-path/_node_modules/path-key/index.js.map +1 -0
  111. package/dist/_node_modules/{execa/_node_modules/npm-run-path → npm-run-path}/index.cjs +1 -1
  112. package/dist/_node_modules/npm-run-path/index.cjs.map +1 -0
  113. package/dist/_node_modules/{execa/_node_modules/npm-run-path → npm-run-path}/index.js +1 -1
  114. package/dist/_node_modules/npm-run-path/index.js.map +1 -0
  115. package/dist/_node_modules/{execa/_node_modules/onetime → onetime}/index.cjs +1 -1
  116. package/dist/_node_modules/onetime/index.cjs.map +1 -0
  117. package/dist/_node_modules/{execa/_node_modules/onetime → onetime}/index.js +1 -1
  118. package/dist/_node_modules/onetime/index.js.map +1 -0
  119. package/dist/_node_modules/p-limit/index.cjs.map +1 -1
  120. package/dist/_node_modules/p-limit/index.js.map +1 -1
  121. package/dist/_node_modules/r19/dist/handleRPCRequest.cjs.map +1 -1
  122. package/dist/_node_modules/r19/dist/handleRPCRequest.js.map +1 -1
  123. package/dist/_node_modules/shebang-command/index.cjs.map +1 -1
  124. package/dist/_node_modules/shebang-command/index.js.map +1 -1
  125. package/dist/_node_modules/signal-exit/index.cjs.map +1 -1
  126. package/dist/_node_modules/signal-exit/index.js.map +1 -1
  127. package/dist/_node_modules/web-streams-polyfill/dist/ponyfill.es2018.cjs.map +1 -1
  128. package/dist/_node_modules/web-streams-polyfill/dist/ponyfill.es2018.js.map +1 -1
  129. package/dist/_node_modules/which/which.cjs.map +1 -1
  130. package/dist/_node_modules/which/which.js.map +1 -1
  131. package/dist/_node_modules/zod/lib/index.cjs.map +1 -1
  132. package/dist/_node_modules/zod/lib/index.js.map +1 -1
  133. package/dist/_virtual/_commonjsHelpers.cjs +1 -4
  134. package/dist/_virtual/_commonjsHelpers.cjs.map +1 -1
  135. package/dist/_virtual/_commonjsHelpers.js +1 -4
  136. package/dist/_virtual/_commonjsHelpers.js.map +1 -1
  137. package/dist/_virtual/index2.cjs +4 -3
  138. package/dist/_virtual/index2.cjs.map +1 -1
  139. package/dist/_virtual/index2.js +4 -2
  140. package/dist/_virtual/index2.js.map +1 -1
  141. package/dist/_virtual/index3.cjs +3 -4
  142. package/dist/_virtual/index3.cjs.map +1 -1
  143. package/dist/_virtual/index3.js +2 -4
  144. package/dist/_virtual/index3.js.map +1 -1
  145. package/dist/auth/PrismicAuthManager.cjs.map +1 -1
  146. package/dist/auth/PrismicAuthManager.js.map +1 -1
  147. package/dist/auth/createPrismicAuthManagerMiddleware.cjs.map +1 -1
  148. package/dist/auth/createPrismicAuthManagerMiddleware.js.map +1 -1
  149. package/dist/constants/API_ENDPOINTS.cjs.map +1 -1
  150. package/dist/constants/API_ENDPOINTS.js.map +1 -1
  151. package/dist/constants/API_TOKENS.cjs.map +1 -1
  152. package/dist/constants/API_TOKENS.js.map +1 -1
  153. package/dist/errors.cjs.map +1 -1
  154. package/dist/errors.js.map +1 -1
  155. package/dist/getEnvironmentInfo.cjs.map +1 -1
  156. package/dist/getEnvironmentInfo.js.map +1 -1
  157. package/dist/lib/DecodeError.cjs.map +1 -1
  158. package/dist/lib/DecodeError.js.map +1 -1
  159. package/dist/lib/buildPrismicRepositoryAPIEndpoint.cjs.map +1 -1
  160. package/dist/lib/buildPrismicRepositoryAPIEndpoint.js.map +1 -1
  161. package/dist/lib/fetchGitHubReleaseBodyForRelease.cjs.map +1 -1
  162. package/dist/lib/fetchGitHubReleaseBodyForRelease.js.map +1 -1
  163. package/dist/lib/fetchNPMPackageVersions.cjs.map +1 -1
  164. package/dist/lib/fetchNPMPackageVersions.js.map +1 -1
  165. package/dist/lib/installDependencies.cjs.map +1 -1
  166. package/dist/lib/installDependencies.js.map +1 -1
  167. package/dist/lib/locateFileUpward.cjs.map +1 -1
  168. package/dist/lib/locateFileUpward.js.map +1 -1
  169. package/dist/lib/prismicrc.cjs.map +1 -1
  170. package/dist/lib/prismicrc.js.map +1 -1
  171. package/dist/managers/SliceMachineManager.cjs.map +1 -1
  172. package/dist/managers/SliceMachineManager.js.map +1 -1
  173. package/dist/managers/customTypes/CustomTypesManager.cjs +213 -4
  174. package/dist/managers/customTypes/CustomTypesManager.cjs.map +1 -1
  175. package/dist/managers/customTypes/CustomTypesManager.d.ts +130 -11
  176. package/dist/managers/customTypes/CustomTypesManager.js +215 -6
  177. package/dist/managers/customTypes/CustomTypesManager.js.map +1 -1
  178. package/dist/managers/git/GitManager.cjs.map +1 -1
  179. package/dist/managers/git/GitManager.js.map +1 -1
  180. package/dist/managers/git/buildGitRepoSpecifier.cjs.map +1 -1
  181. package/dist/managers/git/buildGitRepoSpecifier.js.map +1 -1
  182. package/dist/managers/prismicRepository/PrismicRepositoryManager.cjs.map +1 -1
  183. package/dist/managers/prismicRepository/PrismicRepositoryManager.js.map +1 -1
  184. package/dist/managers/project/ProjectManager.cjs.map +1 -1
  185. package/dist/managers/project/ProjectManager.js.map +1 -1
  186. package/dist/managers/screenshots/ScreenshotsManager.cjs.map +1 -1
  187. package/dist/managers/screenshots/ScreenshotsManager.js.map +1 -1
  188. package/dist/managers/sliceTemplateLibrary/SliceTemplateLibraryManager.cjs.map +1 -1
  189. package/dist/managers/sliceTemplateLibrary/SliceTemplateLibraryManager.js.map +1 -1
  190. package/dist/managers/slices/SlicesManager.cjs.map +1 -1
  191. package/dist/managers/slices/SlicesManager.js.map +1 -1
  192. package/dist/managers/telemetry/TelemetryManager.cjs.map +1 -1
  193. package/dist/managers/telemetry/TelemetryManager.js.map +1 -1
  194. package/dist/managers/versions/VersionsManager.cjs.map +1 -1
  195. package/dist/managers/versions/VersionsManager.js.map +1 -1
  196. package/package.json +5 -5
  197. package/src/managers/customTypes/CustomTypesManager.ts +365 -6
  198. package/dist/_node_modules/execa/_node_modules/npm-run-path/index.cjs.map +0 -1
  199. package/dist/_node_modules/execa/_node_modules/npm-run-path/index.js.map +0 -1
  200. package/dist/_node_modules/execa/_node_modules/onetime/index.cjs.map +0 -1
  201. package/dist/_node_modules/execa/_node_modules/onetime/index.js.map +0 -1
  202. package/dist/_node_modules/execa/_node_modules/path-key/index.cjs.map +0 -1
  203. package/dist/_node_modules/execa/_node_modules/path-key/index.js.map +0 -1
  204. /package/dist/_node_modules/{execa → npm-run-path}/_node_modules/path-key/index.cjs +0 -0
  205. /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-beta.1",
3
+ "version": "0.24.15-beta.11",
4
4
  "description": "Manage all aspects of a Slice Machine project.",
5
5
  "repository": {
6
6
  "type": "git",
@@ -67,10 +67,10 @@
67
67
  "@antfu/ni": "^0.20.0",
68
68
  "@prismicio/client": "7.17.0",
69
69
  "@prismicio/custom-types-client": "2.1.0",
70
- "@prismicio/mocks": "2.12.0",
71
- "@prismicio/types-internal": "3.8.0",
70
+ "@prismicio/mocks": "2.13.0",
71
+ "@prismicio/types-internal": "3.10.0",
72
72
  "@segment/analytics-node": "^2.1.2",
73
- "@slicemachine/plugin-kit": "0.4.77-beta.1",
73
+ "@slicemachine/plugin-kit": "0.4.77-beta.12",
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
  },
@@ -2,7 +2,13 @@ import * as t from "io-ts";
2
2
  import * as prismicCustomTypesClient from "@prismicio/custom-types-client";
3
3
  import {
4
4
  CustomType,
5
+ Group,
6
+ NestableWidget,
7
+ NestedGroup,
5
8
  SharedSlice,
9
+ UID,
10
+ traverseCustomType,
11
+ traverseSharedSlice,
6
12
  } from "@prismicio/types-internal/lib/customtypes";
7
13
  import {
8
14
  CallHookReturnType,
@@ -82,6 +88,25 @@ type CustomTypesMachineManagerDeleteCustomTypeReturnType = {
82
88
  errors: (DecodeError | HookError)[];
83
89
  };
84
90
 
91
+ type CustomTypesMachineManagerUpdateCustomTypeReturnType = {
92
+ errors: (DecodeError | HookError)[];
93
+ };
94
+
95
+ type CustomTypeFieldIdChangedMeta = {
96
+ previousPath: string[];
97
+ newPath: string[];
98
+ };
99
+
100
+ type CrCustomType =
101
+ | string
102
+ | { id: string; fields?: readonly CrCustomTypeNestedCr[] };
103
+ type CrCustomTypeNestedCr =
104
+ | string
105
+ | { id: string; customtypes: readonly CrCustomTypeFieldLeaf[] };
106
+ type CrCustomTypeFieldLeaf =
107
+ | string
108
+ | { id: string; fields?: readonly string[] };
109
+
85
110
  export class CustomTypesManager extends BaseManager {
86
111
  async readCustomTypeLibrary(): Promise<SliceMachineManagerReadCustomTypeLibraryReturnType> {
87
112
  assertPluginsInitialized(this.sliceMachinePluginRunner);
@@ -167,19 +192,159 @@ export class CustomTypesManager extends BaseManager {
167
192
  };
168
193
  }
169
194
 
195
+ /**
196
+ * Update the Content Relationship API IDs for all existing custom types and
197
+ * slices. The change is determined by properties inside the `updateMeta`
198
+ * property.
199
+ */
200
+ private async updateContentRelationships(
201
+ args: { model: CustomType } & CustomTypeFieldIdChangedMeta,
202
+ ): Promise<
203
+ OnlyHookErrors<CallHookReturnType<CustomTypeUpdateHook>> & {
204
+ rollback?: () => Promise<void>;
205
+ }
206
+ > {
207
+ assertPluginsInitialized(this.sliceMachinePluginRunner);
208
+
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
+ });
245
+
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();
249
+
250
+ for (const library of libraries) {
251
+ const slices = await this.slices.readAllSlicesForLibrary({
252
+ libraryID: library.libraryID,
253
+ });
254
+
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
+ });
272
+ },
273
+ previousPath,
274
+ newPath,
275
+ });
276
+ }
277
+
278
+ // Process all the Content Relationship updates at once.
279
+ const crUpdatesResult = await Promise.all(
280
+ crUpdates.map((update) => update.updatePromise),
281
+ );
282
+
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
+ };
290
+ }
291
+ }
292
+
293
+ return { errors: [] };
294
+ }
295
+
170
296
  async updateCustomType(
171
297
  args: CustomTypeUpdateHookData,
172
- ): Promise<OnlyHookErrors<CallHookReturnType<CustomTypeUpdateHook>>> {
298
+ ): Promise<CustomTypesMachineManagerUpdateCustomTypeReturnType> {
173
299
  assertPluginsInitialized(this.sliceMachinePluginRunner);
300
+ const { model } = args;
301
+ const { fieldIdChanged } = args.updateMeta ?? {};
174
302
 
175
- 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(
176
321
  "custom-type:update",
177
- args,
322
+ { model },
178
323
  );
179
324
 
180
- return {
181
- errors: hookResult.errors,
182
- };
325
+ if (customTypeUpdateResult.errors.length > 0) {
326
+ return { errors: customTypeUpdateResult.errors };
327
+ }
328
+
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: [] };
183
348
  }
184
349
 
185
350
  async renameCustomType(
@@ -393,3 +558,197 @@ const InferSliceResponse = z.object({
393
558
  }),
394
559
  langSmithUrl: z.string().url().optional(),
395
560
  });
561
+
562
+ function updateCRCustomType(
563
+ args: { customType: CrCustomType } & CustomTypeFieldIdChangedMeta,
564
+ ): CrCustomType {
565
+ const [previousCustomTypeId, previousFieldId] = args.previousPath;
566
+ const [newCustomTypeId, newFieldId] = args.newPath;
567
+
568
+ if (!previousCustomTypeId || !newCustomTypeId) {
569
+ throw new Error(
570
+ "Could not find a customtype id in previousPath and/or newPath, which should not be possible.",
571
+ );
572
+ }
573
+
574
+ if (!previousFieldId || !newFieldId) {
575
+ throw new Error(
576
+ "Could not find a field id in previousPath and/or newPath, which should not be possible.",
577
+ );
578
+ }
579
+
580
+ const customType = shallowCloneIfObject(args.customType);
581
+
582
+ if (typeof customType === "string" || !customType.fields) {
583
+ return customType;
584
+ }
585
+
586
+ const matchedCustomTypeId = customType.id === previousCustomTypeId;
587
+
588
+ const newFields = customType.fields.map((fieldArg) => {
589
+ const customTypeField = shallowCloneIfObject(fieldArg);
590
+
591
+ if (typeof customTypeField === "string") {
592
+ if (
593
+ matchedCustomTypeId &&
594
+ customTypeField === previousFieldId &&
595
+ customTypeField !== newFieldId
596
+ ) {
597
+ // We have reached a field id that matches the id that was renamed,
598
+ // so we update it new one. The field is a string, so return the new
599
+ // id.
600
+ return newFieldId;
601
+ }
602
+
603
+ return customTypeField;
604
+ }
605
+
606
+ if (
607
+ matchedCustomTypeId &&
608
+ customTypeField.id === previousFieldId &&
609
+ customTypeField.id !== newFieldId
610
+ ) {
611
+ // We have reached a field id that matches the id that was renamed,
612
+ // so we update it new one.
613
+ // Since field is not a string, we don't exit, as we might have
614
+ // something to update further down in customtypes.
615
+ customTypeField.id = newFieldId;
616
+ }
617
+
618
+ return {
619
+ ...customTypeField,
620
+ customtypes: customTypeField.customtypes.map((customTypeArg) => {
621
+ const nestedCustomType = shallowCloneIfObject(customTypeArg);
622
+
623
+ if (
624
+ typeof nestedCustomType === "string" ||
625
+ !nestedCustomType.fields ||
626
+ // Since we are on the last level, if we don't start matching right
627
+ // at the custom type id, we can return exit early because it's not
628
+ // a match.
629
+ nestedCustomType.id !== previousCustomTypeId
630
+ ) {
631
+ return nestedCustomType;
632
+ }
633
+
634
+ return {
635
+ ...nestedCustomType,
636
+ fields: nestedCustomType.fields.map((fieldArg) => {
637
+ const nestedCustomTypeField = shallowCloneIfObject(fieldArg);
638
+
639
+ if (
640
+ nestedCustomTypeField === previousFieldId &&
641
+ nestedCustomTypeField !== newFieldId
642
+ ) {
643
+ // Matches the previous id, so we update it and return because
644
+ // it's the last level.
645
+ return newFieldId;
646
+ }
647
+
648
+ return nestedCustomTypeField;
649
+ }),
650
+ };
651
+ }),
652
+ };
653
+ });
654
+
655
+ return { ...customType, fields: newFields };
656
+ }
657
+
658
+ /**
659
+ * Update the Content Relationship API IDs of a single field. The change is
660
+ * determined by the `previousPath` and `newPath` properties.
661
+ */
662
+ function updateFieldContentRelationships<
663
+ T extends UID | NestableWidget | Group | NestedGroup,
664
+ >(args: { field: T } & CustomTypeFieldIdChangedMeta): T {
665
+ const { field, ...updateMeta } = args;
666
+ if (
667
+ field.type !== "Link" ||
668
+ field.config?.select !== "document" ||
669
+ !field.config?.customtypes
670
+ ) {
671
+ // not a content relationship field
672
+ return field;
673
+ }
674
+
675
+ const newCustomTypes = field.config.customtypes.map((customType) => {
676
+ return updateCRCustomType({ customType, ...updateMeta });
677
+ });
678
+
679
+ return {
680
+ ...field,
681
+ config: { ...field.config, customtypes: newCustomTypes },
682
+ };
683
+ }
684
+
685
+ export function updateCustomTypeContentRelationships(
686
+ args: {
687
+ models: { model: CustomType }[];
688
+ onUpdate: (model: { previousModel: CustomType; model: CustomType }) => void;
689
+ } & CustomTypeFieldIdChangedMeta,
690
+ ): void {
691
+ const { models, previousPath, newPath, onUpdate } = args;
692
+
693
+ for (const { model: customType } of models) {
694
+ const updatedCustomType = traverseCustomType({
695
+ customType,
696
+ onField: ({ field }) => {
697
+ return updateFieldContentRelationships({
698
+ field,
699
+ previousPath,
700
+ newPath,
701
+ });
702
+ },
703
+ });
704
+
705
+ if (!isEqualModel(customType, updatedCustomType)) {
706
+ onUpdate({ model: updatedCustomType, previousModel: customType });
707
+ }
708
+ }
709
+ }
710
+
711
+ export function updateSharedSliceContentRelationships(
712
+ args: {
713
+ models: { model: SharedSlice }[];
714
+ onUpdate: (model: {
715
+ previousModel: SharedSlice;
716
+ model: SharedSlice;
717
+ }) => void;
718
+ } & CustomTypeFieldIdChangedMeta,
719
+ ): void {
720
+ const { models, previousPath, newPath, onUpdate } = args;
721
+
722
+ for (const { model: slice } of models) {
723
+ const updateSlice = traverseSharedSlice({
724
+ path: ["."],
725
+ slice,
726
+ onField: ({ field }) => {
727
+ return updateFieldContentRelationships({
728
+ field,
729
+ previousPath,
730
+ newPath,
731
+ });
732
+ },
733
+ });
734
+
735
+ if (!isEqualModel(slice, updateSlice)) {
736
+ onUpdate({ model: updateSlice, previousModel: slice });
737
+ }
738
+ }
739
+ }
740
+
741
+ function isEqualModel<T extends CustomType | SharedSlice>(
742
+ modelA: T,
743
+ modelB: T,
744
+ ): boolean {
745
+ return JSON.stringify(modelA) === JSON.stringify(modelB);
746
+ }
747
+
748
+ function shallowCloneIfObject<T>(value: T): T {
749
+ if (typeof value === "object") {
750
+ return { ...value };
751
+ }
752
+
753
+ return value;
754
+ }
@@ -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]}