1082815dcSEvan Bacon"use strict";
2082815dcSEvan Bacon
3082815dcSEvan BaconObject.defineProperty(exports, "__esModule", {
4082815dcSEvan Bacon  value: true
5082815dcSEvan Bacon});
6082815dcSEvan Baconexports.createRunOncePlugin = createRunOncePlugin;
7082815dcSEvan Baconexports.withRunOnce = void 0;
8082815dcSEvan Baconfunction _history() {
9082815dcSEvan Bacon  const data = require("../utils/history");
10082815dcSEvan Bacon  _history = function () {
11082815dcSEvan Bacon    return data;
12082815dcSEvan Bacon  };
13082815dcSEvan Bacon  return data;
14082815dcSEvan Bacon}
15082815dcSEvan Bacon/**
16082815dcSEvan Bacon * Prevents the same plugin from being run twice.
17082815dcSEvan Bacon * Used for migrating from unversioned expo config plugins to versioned plugins.
18082815dcSEvan Bacon *
19082815dcSEvan Bacon * @param config
20082815dcSEvan Bacon * @param name
21082815dcSEvan Bacon */
22082815dcSEvan Baconconst withRunOnce = (config, {
23082815dcSEvan Bacon  plugin,
24082815dcSEvan Bacon  name,
25082815dcSEvan Bacon  version
26082815dcSEvan Bacon}) => {
27082815dcSEvan Bacon  // Detect if a plugin has already been run on this config.
28082815dcSEvan Bacon  if ((0, _history().getHistoryItem)(config, name)) {
29082815dcSEvan Bacon    return config;
30*ee216927STomasz Sapeta  }
31082815dcSEvan Bacon
32*ee216927STomasz Sapeta  // Push the history item so duplicates cannot be run.
33082815dcSEvan Bacon  config = (0, _history().addHistoryItem)(config, {
34082815dcSEvan Bacon    name,
35082815dcSEvan Bacon    version
36082815dcSEvan Bacon  });
37082815dcSEvan Bacon  return plugin(config);
38082815dcSEvan Bacon};
39*ee216927STomasz Sapeta
40082815dcSEvan Bacon/**
41082815dcSEvan Bacon * Helper method for creating mods from existing config functions.
42082815dcSEvan Bacon *
43082815dcSEvan Bacon * @param action
44082815dcSEvan Bacon */
45082815dcSEvan Baconexports.withRunOnce = withRunOnce;
46082815dcSEvan Baconfunction createRunOncePlugin(plugin, name, version) {
47082815dcSEvan Bacon  return (config, props) => {
48082815dcSEvan Bacon    return withRunOnce(config, {
49082815dcSEvan Bacon      plugin: config => plugin(config, props),
50082815dcSEvan Bacon      name,
51082815dcSEvan Bacon      version
52082815dcSEvan Bacon    });
53082815dcSEvan Bacon  };
54082815dcSEvan Bacon}
55082815dcSEvan Bacon//# sourceMappingURL=withRunOnce.js.map