@jungvonmatt/contentful-migrations 6.0.0 → 6.1.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.
package/README.md CHANGED
@@ -26,11 +26,41 @@ This initializes migrations and stores the config values in the `package.json` o
26
26
 
27
27
  #### Configuration files
28
28
 
29
- The default configuration file name is `.migrationsrc`. But since we use [cosmiconfig](https://github.com/davidtheclark/cosmiconfig#cosmiconfig) you can also use the other supported config file formats and name patterns like `migrationsrc.json` or `migrations.config.js`.
29
+ We use [`@jungvonmatt/contentful-config`](https://github.com/jungvonmatt/contentful-ssg/tree/main/packages/contentful-config) (built on [`@jungvonmatt/config-loader`](https://github.com/jungvonmatt/config-loader) and [`c12`](https://github.com/unjs/c12)) which provides extensive configuration loading capabilities from multiple sources.
30
+
31
+ **Supported configuration locations (in order of priority):**
32
+ - Configuration overrides passed via command line arguments
33
+ - User-specified config file (via `--config` option)
34
+ - `migrations.config.{js,ts,mjs,cjs,mts,cts}`
35
+ - `.config/migrations.{js,ts,mjs,cjs,mts,cts,json,jsonc,json5,yaml,yml,toml}`
36
+ - `.migrationsrc.{js,ts,mjs,cjs,mts,cts,json,jsonc,json5,yaml,yml,toml}`
37
+ - `.migrationsrc`
38
+ - `package.json` (in a `migrations` property)
39
+ - Environment variables (with `CONTENTFUL_MIGRATIONS_CONFIG_*` prefix)
40
+ - `.env` files (`.env.{NODE_ENV}`, `.env`)
41
+ - Default configuration
42
+
43
+ **Extending configurations:**
44
+ You can extend configurations from other files or remote sources using the `extends` property:
45
+ ```js
46
+ // migrations.config.js
47
+ export default {
48
+ extends: ['./base.config.js', 'github:user/repo'],
49
+ // your config...
50
+ }
51
+ ```
30
52
 
31
- You can also use any config file path by adding the `-f <path/to/confg>` or `--config-file <path/to/config>` command line argument. The extensions `.json`, `.yaml`, `.yml`, `.js`, `.ts`, `.mjs`, or `.cjs` are supported.
53
+ **Environment-specific configuration:**
54
+ ```js
55
+ // migrations.config.js
56
+ export default {
57
+ spaceId: 'default-space',
58
+ $development: { spaceId: 'dev-space' },
59
+ $production: { spaceId: 'prod-space' }
60
+ }
61
+ ```
32
62
 
33
- By specifying the config file path you can use multiple config files for different environments or spaces in your project.
63
+ You can specify any config file path using the `--config <path/to/config>` command line argument. Multiple config files can be used for different environments or spaces in your project.
34
64
 
35
65
  #### Configuration values
36
66
 
package/cli.js CHANGED
@@ -66,15 +66,21 @@ program
66
66
  .description('Initialize contentful-migrations')
67
67
  .action(
68
68
  actionRunner(async (cmd) => {
69
- const config = await getConfig(parseArgs(cmd || {}), [
70
- 'managementToken',
71
- 'spaceId',
72
- 'environmentId',
73
- 'storage',
74
- 'fieldId',
75
- 'migrationContentTypeId',
76
- 'directory',
77
- ]);
69
+ const config = await getConfig(
70
+ parseArgs(cmd || {}),
71
+ [],
72
+ [
73
+ 'managementToken',
74
+ 'host',
75
+ 'organizationId',
76
+ 'spaceId',
77
+ 'environmentId',
78
+ 'storage',
79
+ 'fieldId',
80
+ 'migrationContentTypeId',
81
+ 'directory',
82
+ ]
83
+ );
78
84
 
79
85
  const { managementToken, accessToken, environmentId, spaceId, ...rest } = config;
80
86
 
@@ -201,7 +207,7 @@ program
201
207
  .description('Execute a single migration.')
202
208
  .action(
203
209
  actionRunner(async (file, options) => {
204
- const config = await getConfig(parseArgs(cmd || {}), [
210
+ const config = await getConfig(parseArgs(options || {}), [
205
211
  'managementToken',
206
212
  'spaceId',
207
213
  'environmentId',
@@ -234,7 +240,7 @@ program
234
240
  .action(
235
241
  actionRunner(async (file, options) => {
236
242
  const { remove, add } = options;
237
- const config = await getConfig(parseArgs(cmd || {}), [
243
+ const config = await getConfig(parseArgs(options || {}), [
238
244
  'managementToken',
239
245
  'spaceId',
240
246
  'environmentId',
package/lib/config.js CHANGED
@@ -13,13 +13,14 @@ const STATE_FAILURE = 'failure';
13
13
  * Get configuration
14
14
  * @param {Object} args
15
15
  */
16
- const getConfig = async (args, required = []) => {
16
+ const getConfig = async (args, required = [], prompt = []) => {
17
17
  const { configFile, cwd, ...overrides } = args;
18
18
  const { loadContentfulConfig } = await import('@jungvonmatt/contentful-config');
19
19
  const result = await loadContentfulConfig('migrations', {
20
20
  configFile,
21
21
  cwd,
22
22
  overrides,
23
+ prompt,
23
24
  defaultConfig: {
24
25
  fieldId: 'migration',
25
26
  migrationContentTypeId: 'contentful-migrations',
@@ -61,11 +62,13 @@ const getPromts = (data) => {
61
62
  message: 'How should the migrations be managed',
62
63
  choices: [
63
64
  {
64
- name: 'Content-model (recommended)',
65
+ message: 'Content-model (recommended)',
66
+ name: STORAGE_CONTENT,
65
67
  value: STORAGE_CONTENT,
66
68
  },
67
69
  {
68
- name: 'Tag',
70
+ message: 'Tag',
71
+ name: STORAGE_TAG,
69
72
  value: STORAGE_TAG,
70
73
  },
71
74
  ],
@@ -75,7 +78,8 @@ const getPromts = (data) => {
75
78
  type: 'input',
76
79
  name: 'fieldId',
77
80
  message: 'Id of the tag where the the migration version is stored',
78
- skip(answers) {
81
+ skip() {
82
+ const answers = this?.enquirer?.answers;
79
83
  return answers.storage === STORAGE_CONTENT;
80
84
  },
81
85
  initial: data.fieldId,
@@ -84,7 +88,8 @@ const getPromts = (data) => {
84
88
  type: 'input',
85
89
  name: 'migrationContentTypeId',
86
90
  message: 'Id of the content-type where the the migrations are stored',
87
- skip(answers) {
91
+ skip() {
92
+ const answers = this?.enquirer?.answers;
88
93
  return answers.storage === STORAGE_TAG;
89
94
  },
90
95
  initial: data.migrationContentTypeId,
package/lib/diff.js CHANGED
@@ -30,7 +30,7 @@ const getNodeDate = (node) => {
30
30
 
31
31
  const oldValueColor = (text) => pc.reset(pc.red(pc.dim(text)));
32
32
  const newValueColor = (text) => pc.reset(pc.green(text));
33
- const unchangedColor = (text) => pc.reset(pc.grey(text));
33
+ const unchangedColor = (text) => pc.reset(pc.gray(text));
34
34
 
35
35
  const diffString = (source, dest) => {
36
36
  const diff = Diff.diffWords(source, dest);
@@ -45,7 +45,7 @@ const diffString = (source, dest) => {
45
45
 
46
46
  if (part.value.length > 50) {
47
47
  const value = `${part.value.slice(0, 15)} [...] ${part.value.slice(-15)}`;
48
- return unchangedColor(pc.grey(value));
48
+ return unchangedColor(pc.gray(value));
49
49
  }
50
50
 
51
51
  return unchangedColor(part.value);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@jungvonmatt/contentful-migrations",
3
- "version": "6.0.0",
3
+ "version": "6.1.1",
4
4
  "description": "Helper to handle migrations in contentful",
5
5
  "main": "index.js",
6
6
  "files": [
@@ -35,7 +35,7 @@
35
35
  ],
36
36
  "dependencies": {
37
37
  "@contentful/rich-text-plain-text-renderer": "^15.12.1",
38
- "@jungvonmatt/contentful-config": "^3.0.1",
38
+ "@jungvonmatt/contentful-config": "^3.0.3",
39
39
  "array.prototype.flatmap": "^1.3.3",
40
40
  "ascii-tree": "^0.3.0",
41
41
  "cli-progress": "^3.11.2",
@@ -45,7 +45,6 @@
45
45
  "contentful-import": "^9.4.91",
46
46
  "contentful-management": "^11.48.0",
47
47
  "contentful-migration": "^4.28.1",
48
- "cosmiconfig": "^8.0.0",
49
48
  "deep-diff": "^1.0.2",
50
49
  "diff": "^5.1.0",
51
50
  "dotenv": "^10.0.0",