@jungvonmatt/contentful-ssg 5.0.0 → 6.0.0

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 (49) hide show
  1. package/dist/__test__/mock.js +1 -1
  2. package/dist/__test__/mock.js.map +1 -1
  3. package/dist/cli.js.map +1 -1
  4. package/dist/index.js +1 -1
  5. package/dist/index.js.map +1 -1
  6. package/dist/lib/cf-cache.js +1 -2
  7. package/dist/lib/cf-cache.js.map +1 -1
  8. package/dist/lib/content-sync.d.ts +17 -0
  9. package/dist/lib/content-sync.js +26 -0
  10. package/dist/lib/content-sync.js.map +1 -0
  11. package/dist/lib/contentful.d.ts +9 -54
  12. package/dist/lib/contentful.js +7 -283
  13. package/dist/lib/contentful.js.map +1 -1
  14. package/dist/lib/watch-webhook.d.ts +2 -0
  15. package/dist/lib/watch-webhook.js +53 -0
  16. package/dist/lib/watch-webhook.js.map +1 -0
  17. package/dist/mapper/map-field.js +1 -1
  18. package/dist/mapper/map-field.js.map +1 -1
  19. package/dist/mapper/map-reference-field.d.ts +1 -1
  20. package/dist/mapper/map-reference-field.js +1 -1
  21. package/dist/mapper/map-reference-field.js.map +1 -1
  22. package/dist/mapper/map-rich-text-field.d.ts +1 -1
  23. package/dist/tasks/fetch.js +3 -2
  24. package/dist/tasks/fetch.js.map +1 -1
  25. package/dist/tasks/localize.js +1 -1
  26. package/dist/tasks/localize.js.map +1 -1
  27. package/dist/tasks/transform.d.ts +1 -1
  28. package/dist/types.d.ts +7 -42
  29. package/package.json +21 -23
  30. package/src/__test__/mock.ts +2 -2
  31. package/src/cli.test.ts +225 -0
  32. package/src/cli.ts +7 -7
  33. package/src/index.ts +2 -2
  34. package/src/lib/cf-cache.test.ts +7 -5
  35. package/src/lib/cf-cache.ts +1 -2
  36. package/src/lib/content-sync.ts +52 -0
  37. package/src/lib/contentful.test.ts +81 -35
  38. package/src/lib/contentful.ts +61 -527
  39. package/src/lib/utils.test.ts +2 -2
  40. package/src/lib/watch-webhook.ts +57 -0
  41. package/src/mapper/map-entry.test.ts +3 -3
  42. package/src/mapper/map-field.test.ts +2 -2
  43. package/src/mapper/map-field.ts +1 -1
  44. package/src/mapper/map-reference-field.ts +1 -1
  45. package/src/tasks/fetch.test.ts +12 -5
  46. package/src/tasks/fetch.ts +17 -4
  47. package/src/tasks/localize.test.ts +1 -1
  48. package/src/tasks/localize.ts +1 -1
  49. package/src/types.ts +32 -79
@@ -0,0 +1,53 @@
1
+ import { createHash } from 'crypto';
2
+ import { hostname } from 'os';
3
+ import { v4 as uuidv4 } from 'uuid';
4
+ import { addWebhook } from '@jungvonmatt/contentful-client';
5
+ export const addWatchWebhook = async (options, url) => {
6
+ let topics = [
7
+ 'ContentType.publish',
8
+ 'ContentType.unpublish',
9
+ 'ContentType.delete',
10
+ 'Entry.archive',
11
+ 'Entry.unarchive',
12
+ 'Entry.publish',
13
+ 'Entry.unpublish',
14
+ 'Entry.delete',
15
+ 'Asset.archive',
16
+ 'Asset.unarchive',
17
+ 'Asset.publish',
18
+ 'Asset.unpublish',
19
+ 'Asset.delete',
20
+ ];
21
+ if (options.preview) {
22
+ topics = [
23
+ ...topics,
24
+ 'ContentType.save',
25
+ 'Entry.save',
26
+ 'Entry.auto_save',
27
+ 'Asset.save',
28
+ 'Asset.auto_save',
29
+ ];
30
+ }
31
+ const uuid = url ? createHash('sha1').update(url).digest('hex') : uuidv4();
32
+ return addWebhook(options, uuid, {
33
+ name: `contentful-ssg (${hostname()})`,
34
+ url,
35
+ httpBasicUsername: null,
36
+ topics,
37
+ filters: [
38
+ {
39
+ equals: [
40
+ {
41
+ doc: 'sys.environment.sys.id',
42
+ },
43
+ options.environmentId,
44
+ ],
45
+ },
46
+ ],
47
+ transformation: {
48
+ includeContentLength: true,
49
+ },
50
+ headers: [],
51
+ });
52
+ };
53
+ //# sourceMappingURL=watch-webhook.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"watch-webhook.js","sourceRoot":"","sources":["../../src/lib/watch-webhook.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,QAAQ,CAAC;AACpC,OAAO,EAAE,QAAQ,EAAE,MAAM,IAAI,CAAC;AAC9B,OAAO,EAAE,EAAE,IAAI,MAAM,EAAE,MAAM,MAAM,CAAC;AACpC,OAAO,EAAE,UAAU,EAAE,MAAM,gCAAgC,CAAC;AAG5D,MAAM,CAAC,MAAM,eAAe,GAAG,KAAK,EAAE,OAAyB,EAAE,GAAW,EAAE,EAAE;IAC9E,IAAI,MAAM,GAAG;QACX,qBAAqB;QACrB,uBAAuB;QACvB,oBAAoB;QACpB,eAAe;QACf,iBAAiB;QACjB,eAAe;QACf,iBAAiB;QACjB,cAAc;QACd,eAAe;QACf,iBAAiB;QACjB,eAAe;QACf,iBAAiB;QACjB,cAAc;KACf,CAAC;IAEF,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC;QACpB,MAAM,GAAG;YACP,GAAG,MAAM;YACT,kBAAkB;YAClB,YAAY;YACZ,iBAAiB;YACjB,YAAY;YACZ,iBAAiB;SAClB,CAAC;IACJ,CAAC;IAED,MAAM,IAAI,GAAG,GAAG,CAAC,CAAC,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;IAE3E,OAAO,UAAU,CAAC,OAAO,EAAE,IAAI,EAAE;QAC/B,IAAI,EAAE,mBAAmB,QAAQ,EAAE,GAAG;QACtC,GAAG;QACH,iBAAiB,EAAE,IAAI;QACvB,MAAM;QACN,OAAO,EAAE;YACP;gBACE,MAAM,EAAE;oBACN;wBACE,GAAG,EAAE,wBAAwB;qBAC9B;oBACD,OAAO,CAAC,aAAa;iBACtB;aACF;SACF;QACD,cAAc,EAAE;YACd,oBAAoB,EAAE,IAAI;SAC3B;QACD,OAAO,EAAE,EAAE;KACZ,CAAC,CAAC;AACL,CAAC,CAAC"}
@@ -1,4 +1,4 @@
1
- import { FIELD_TYPE_ARRAY, FIELD_TYPE_DATE, FIELD_TYPE_LINK, FIELD_TYPE_RICHTEXT, } from '../lib/contentful.js';
1
+ import { FIELD_TYPE_ARRAY, FIELD_TYPE_DATE, FIELD_TYPE_LINK, FIELD_TYPE_RICHTEXT, } from '@jungvonmatt/contentful-client';
2
2
  import { mapDateField } from './map-date-field.js';
3
3
  import { mapReferenceField } from './map-reference-field.js';
4
4
  import { mapRichTextField } from './map-rich-text-field.js';
@@ -1 +1 @@
1
- {"version":3,"file":"map-field.js","sourceRoot":"","sources":["../../src/mapper/map-field.ts"],"names":[],"mappings":"AAEA,OAAO,EACL,gBAAgB,EAChB,eAAe,EACf,eAAe,EACf,mBAAmB,GACpB,MAAM,sBAAsB,CAAC;AAE9B,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAC7D,OAAO,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AAQ5D,MAAM,CAAC,MAAM,QAAQ,GAAG,KAAK,EAC3B,gBAAkC,EAClC,cAA8B,EAC9B,MAAc,EACI,EAAE;IACpB,MAAM,EAAE,aAAa,EAAE,YAAY,EAAE,GAAG,gBAAgB,CAAC;IACzD,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,aAAa,IAAI,EAAE,CAAC;IAG5C,QAAQ,IAAI,EAAE,CAAC;QACb,KAAK,eAAe;YAClB,OAAO,YAAY,CAAC,YAAgC,CAAC,CAAC;QACxD,KAAK,eAAe;YAClB,OAAO,iBAAiB,CACtB,YAAwE,EACxE,gBAAgB,EAChB,cAAc,CACf,CAAC;QACJ,KAAK,mBAAmB;YACtB,OAAO,gBAAgB,CAAC,YAAwB,EAAE,gBAAgB,EAAE,cAAc,EAAE,MAAM,CAAC,CAAC;QAC9F,KAAK,gBAAgB;YACnB,OAAO,OAAO,CAAC,GAAG,CACf,CAAC,YAAY,IAAI,EAAE,CAA4B,CAAC,GAAG,CAAC,KAAK,EAAE,OAAO,EAAE,EAAE,CACrE,QAAQ,CACN;gBACE,GAAG,gBAAgB;gBACnB,aAAa,EAAE,EAAE,GAAG,aAAa,EAAE,GAAG,KAAK,EAAE;gBAC7C,YAAY,EAAE,OAAO;aACtB,EACD,cAAc,EACd,MAAM,CACP,CACF,CACF,CAAC;QAEJ;YACE,OAAO,YAAY,CAAC;IACxB,CAAC;AACH,CAAC,CAAC"}
1
+ {"version":3,"file":"map-field.js","sourceRoot":"","sources":["../../src/mapper/map-field.ts"],"names":[],"mappings":"AAEA,OAAO,EACL,gBAAgB,EAChB,eAAe,EACf,eAAe,EACf,mBAAmB,GACpB,MAAM,gCAAgC,CAAC;AAExC,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAC7D,OAAO,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AAQ5D,MAAM,CAAC,MAAM,QAAQ,GAAG,KAAK,EAC3B,gBAAkC,EAClC,cAA8B,EAC9B,MAAc,EACI,EAAE;IACpB,MAAM,EAAE,aAAa,EAAE,YAAY,EAAE,GAAG,gBAAgB,CAAC;IACzD,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,aAAa,IAAI,EAAE,CAAC;IAG5C,QAAQ,IAAI,EAAE,CAAC;QACb,KAAK,eAAe;YAClB,OAAO,YAAY,CAAC,YAAgC,CAAC,CAAC;QACxD,KAAK,eAAe;YAClB,OAAO,iBAAiB,CACtB,YAAwE,EACxE,gBAAgB,EAChB,cAAc,CACf,CAAC;QACJ,KAAK,mBAAmB;YACtB,OAAO,gBAAgB,CAAC,YAAwB,EAAE,gBAAgB,EAAE,cAAc,EAAE,MAAM,CAAC,CAAC;QAC9F,KAAK,gBAAgB;YACnB,OAAO,OAAO,CAAC,GAAG,CACf,CAAC,YAAY,IAAI,EAAE,CAA4B,CAAC,GAAG,CAAC,KAAK,EAAE,OAAO,EAAE,EAAE,CACrE,QAAQ,CACN;gBACE,GAAG,gBAAgB;gBACnB,aAAa,EAAE,EAAE,GAAG,aAAa,EAAE,GAAG,KAAK,EAAE;gBAC7C,YAAY,EAAE,OAAO;aACtB,EACD,cAAc,EACd,MAAM,CACP,CACF,CACF,CAAC;QAEJ;YACE,OAAO,YAAY,CAAC;IACxB,CAAC;AACH,CAAC,CAAC"}
@@ -8,4 +8,4 @@ export declare const mapEntryLink: (transformContext: TransformContext) => {
8
8
  contentType?: undefined;
9
9
  };
10
10
  export declare const mapAssetLink: (transformContext: TransformContext) => MapAssetLink;
11
- export declare const mapReferenceField: (fieldContent: EntryFields.EntryLink<EntrySkeletonType> | Node, transformContext: TransformContext, runtimeContext: RuntimeContext) => Promise<import("../types.js").KeyValueMap>;
11
+ export declare const mapReferenceField: (fieldContent: EntryFields.EntryLink<EntrySkeletonType> | Node, transformContext: TransformContext, runtimeContext: RuntimeContext) => Promise<import("@jungvonmatt/contentful-client").KeyValueMap>;
@@ -1,4 +1,4 @@
1
- import { getContentId, getContentTypeId, isAsset, isAssetLink, isEntry, isEntryLink, } from '../lib/contentful.js';
1
+ import { getContentId, getContentTypeId, isAsset, isAssetLink, isEntry, isEntryLink, } from '@jungvonmatt/contentful-client';
2
2
  export const mapEntryLink = (transformContext) => {
3
3
  const { id, contentTypeId } = transformContext;
4
4
  if (id && contentTypeId) {
@@ -1 +1 @@
1
- {"version":3,"file":"map-reference-field.js","sourceRoot":"","sources":["../../src/mapper/map-reference-field.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"map-reference-field.js","sourceRoot":"","sources":["../../src/mapper/map-reference-field.ts"],"names":[],"mappings":"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"}
@@ -1,6 +1,6 @@
1
1
  import type { Document, Mark, Node as RichTextNode, TopLevelBlock } from '@contentful/rich-text-types';
2
2
  import type { Config, RichTextData, RuntimeContext, TransformContext } from '../types.js';
3
- export declare const mapRichTextDataNode: (node: RichTextData, transformContext: TransformContext, runtimeContext: RuntimeContext) => Promise<import("../types.js").KeyValueMap | RichTextData>;
3
+ export declare const mapRichTextDataNode: (node: RichTextData, transformContext: TransformContext, runtimeContext: RuntimeContext) => Promise<import("@jungvonmatt/contentful-client/dist/types.js").KeyValueMap | RichTextData>;
4
4
  export declare const mapRichTextContentNode: (nodes: TopLevelBlock[], transformContext: TransformContext, runtimeContext: RuntimeContext) => Promise<Record<string, any>[]>;
5
5
  export declare const mapRichTextMarks: (nodes?: Mark[]) => string[];
6
6
  export declare const mapRichTextNodes: (node: RichTextNode, transformContext: TransformContext, runtimeContext: RuntimeContext) => Promise<Record<string, any>>;
@@ -1,6 +1,7 @@
1
- import { getContent, getFieldSettings, getEntriesLinkedToEntry, getEntriesLinkedToAsset, } from '../lib/contentful.js';
1
+ import { getFieldSettings, getEntriesLinkedToEntry, getEntriesLinkedToAsset, } from '@jungvonmatt/contentful-client';
2
+ import { getContent } from '../lib/contentful.js';
2
3
  export const fetch = async (context, config) => {
3
- const content = await getContent(config);
4
+ const content = (await getContent(config));
4
5
  const { locales, contentTypes } = content;
5
6
  const additionalEntriesPromise = [
6
7
  ...(content?.deletedEntries?.map(async (entry) => getEntriesLinkedToEntry(config, entry.sys.id)) ?? []),
@@ -1 +1 @@
1
- {"version":3,"file":"fetch.js","sourceRoot":"","sources":["../../src/tasks/fetch.ts"],"names":[],"mappings":"AACA,OAAO,EACL,UAAU,EACV,gBAAgB,EAChB,uBAAuB,EACvB,uBAAuB,GACxB,MAAM,sBAAsB,CAAC;AAE9B,MAAM,CAAC,MAAM,KAAK,GAAG,KAAK,EAAE,OAAuB,EAAE,MAAc,EAAE,EAAE;IACrE,MAAM,OAAO,GAAG,MAAM,UAAU,CAAC,MAA0B,CAAC,CAAC;IAC7D,MAAM,EAAE,OAAO,EAAE,YAAY,EAAE,GAAG,OAAO,CAAC;IAG1C,MAAM,wBAAwB,GAAG;QAC/B,GAAG,CAAC,OAAO,EAAE,cAAc,EAAE,GAAG,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE,CAC/C,uBAAuB,CAAC,MAA0B,EAAE,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,CAClE,IAAI,EAAE,CAAC;QACR,GAAG,CAAC,OAAO,EAAE,aAAa,EAAE,GAAG,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE,CAC9C,uBAAuB,CAAC,MAA0B,EAAE,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,CAClE,IAAI,EAAE,CAAC;KACT,CAAC;IAEF,MAAM,iBAAiB,GAAG,CAAC,MAAM,OAAO,CAAC,GAAG,CAAC,wBAAwB,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;IAE/E,OAAO,CAAC,OAAO,GAAG,CAAC,GAAG,CAAC,OAAO,EAAE,OAAO,IAAI,EAAE,CAAC,EAAE,GAAG,iBAAiB,CAAC,CAAC;IAEtE,MAAM,aAAa,GAAG,gBAAgB,CAAC,YAAY,CAAC,CAAC;IACrD,MAAM,EAAE,IAAI,EAAE,aAAa,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IAEzE,OAAO,CAAC,aAAa,GAAG,aAAa,CAAC;IAEtC,OAAO,CAAC,IAAI,GAAG;QACb,GAAG,OAAO;QACV,aAAa;KACd,CAAC;AACJ,CAAC,CAAC"}
1
+ {"version":3,"file":"fetch.js","sourceRoot":"","sources":["../../src/tasks/fetch.ts"],"names":[],"mappings":"AAEA,OAAO,EACL,gBAAgB,EAChB,uBAAuB,EACvB,uBAAuB,GACxB,MAAM,gCAAgC,CAAC;AACxC,OAAO,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAYlD,MAAM,CAAC,MAAM,KAAK,GAAG,KAAK,EAAE,OAAuB,EAAE,MAAc,EAAE,EAAE;IACrE,MAAM,OAAO,GAAG,CAAC,MAAM,UAAU,CAC/B,MAA+C,CAChD,CAAkB,CAAC;IACpB,MAAM,EAAE,OAAO,EAAE,YAAY,EAAE,GAAG,OAAO,CAAC;IAG1C,MAAM,wBAAwB,GAAG;QAC/B,GAAG,CAAC,OAAO,EAAE,cAAc,EAAE,GAAG,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE,CAC/C,uBAAuB,CAAC,MAA0B,EAAE,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,CAClE,IAAI,EAAE,CAAC;QACR,GAAG,CAAC,OAAO,EAAE,aAAa,EAAE,GAAG,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE,CAC9C,uBAAuB,CAAC,MAA0B,EAAE,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,CAClE,IAAI,EAAE,CAAC;KACT,CAAC;IAEF,MAAM,iBAAiB,GAAG,CAAC,MAAM,OAAO,CAAC,GAAG,CAAC,wBAAwB,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;IAE/E,OAAO,CAAC,OAAO,GAAG,CAAC,GAAG,CAAC,OAAO,EAAE,OAAO,IAAI,EAAE,CAAC,EAAE,GAAG,iBAAiB,CAAC,CAAC;IAEtE,MAAM,aAAa,GAAG,gBAAgB,CAAC,YAAY,CAAC,CAAC;IACrD,MAAM,EAAE,IAAI,EAAE,aAAa,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IAEzE,OAAO,CAAC,aAAa,GAAG,aAAa,CAAC;IAEtC,OAAO,CAAC,IAAI,GAAG;QACb,GAAG,OAAO;QACV,aAAa;KACd,CAAC;AACJ,CAAC,CAAC"}
@@ -1,6 +1,6 @@
1
1
  import Listr from 'listr';
2
2
  import { mapAsync } from '../lib/array.js';
3
- import { convertToMap, getContentTypeId } from '../lib/contentful.js';
3
+ import { convertToMap, getContentTypeId } from '@jungvonmatt/contentful-client';
4
4
  export const getLocaleList = (code, locales = []) => {
5
5
  const locale = locales.find((locale) => locale.code === code);
6
6
  return locale ? [locale.code, ...getLocaleList(locale.fallbackCode, locales)] : [];
@@ -1 +1 @@
1
- {"version":3,"file":"localize.js","sourceRoot":"","sources":["../../src/tasks/localize.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"localize.js","sourceRoot":"","sources":["../../src/tasks/localize.ts"],"names":[],"mappings":"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"}
@@ -1,2 +1,2 @@
1
1
  import type { Config, RuntimeContext, TransformContext } from '../types.js';
2
- export declare const transform: (transformContext: TransformContext, runtimeContext: RuntimeContext, config: Config) => Promise<import("../types.js").KeyValueMap>;
2
+ export declare const transform: (transformContext: TransformContext, runtimeContext: RuntimeContext, config: Config) => Promise<import("@jungvonmatt/contentful-client/dist/types.js").KeyValueMap>;
package/dist/types.d.ts CHANGED
@@ -1,23 +1,15 @@
1
1
  import type { Options } from '@contentful/rich-text-html-renderer';
2
2
  import type { Document } from '@contentful/rich-text-types';
3
- import type { QueryOptions } from 'contentful-management/types';
4
3
  import type { Observable, ReplaySubject } from 'rxjs';
5
- import type { ContentTypeField, Asset as ContentfulAsset, ContentType as ContentfulContentType, ContentfulCollection as ContentfulContentfulCollection, Entry as ContentfulEntry, EntryCollection as ContentfulEntryCollection, Locale as ContentfulLocale, DeletedAsset, DeletedEntry, EntryFields, EntrySkeletonType, LocaleCode, ResolvedField } from 'contentful';
4
+ import type { ContentTypeField, DeletedAsset, DeletedEntry, EntryFields, EntrySkeletonType, LocaleCode, ResolvedField } from 'contentful';
5
+ export type { ContentfulConfig, DeliveryQueryOptions, FieldSettings, KeyValueMap, ContentType, Locale, EntryRaw, AssetRaw, Node, NodeRaw, Entry, Asset, ContentfulCollection, EntryCollection, } from '@jungvonmatt/contentful-client';
6
+ import type { ContentfulConfig, KeyValueMap, FieldSettings, Locale, ContentType, EntryRaw, AssetRaw, Entry, Asset } from '@jungvonmatt/contentful-client';
6
7
  import type { ListrTaskObject } from 'listr';
7
8
  import type { FileManager } from './lib/file-manager.js';
8
9
  import type { HookManager } from './lib/hook-manager.js';
9
10
  import type { Stats } from './lib/stats.js';
10
11
  export type Field = ContentTypeField;
11
12
  export type { Ignore } from 'ignore';
12
- export type KeyValueMap<T = any> = Record<string, T>;
13
- export type Locale = ContentfulLocale;
14
- export type ContentType = ContentfulContentType;
15
- export type EntryRaw = ContentfulEntry<EntrySkeletonType, 'WITH_ALL_LOCALES'>;
16
- export type AssetRaw = ContentfulAsset<'WITH_ALL_LOCALES'>;
17
- export type NodeRaw = EntryRaw | AssetRaw;
18
- export type Asset = ContentfulAsset<undefined>;
19
- export type Entry = ContentfulEntry<EntrySkeletonType, undefined>;
20
- export type Node = Entry | Asset;
21
13
  export type EntryFieldRaw = {
22
14
  [FieldName in keyof EntrySkeletonType['fields']]: {
23
15
  [LocaleName in LocaleCode]?: ResolvedField<EntrySkeletonType['fields'][FieldName], 'WITH_ALL_LOCALES'>;
@@ -26,26 +18,11 @@ export type EntryFieldRaw = {
26
18
  export type EntryField = {
27
19
  [FieldName in keyof EntrySkeletonType['fields']]: ResolvedField<EntrySkeletonType['fields'][FieldName], undefined>;
28
20
  };
29
- export type EntryCollection = {
30
- includes?: {
31
- Entry?: EntryRaw[];
32
- Asset?: AssetRaw[];
33
- };
34
- } & ContentfulEntryCollection<EntrySkeletonType, 'WITH_ALL_LOCALES'>;
35
- export type ContentfulCollection<T> = ContentfulContentfulCollection<T>;
36
21
  export type ContentfulRichtextOptions = Options;
37
22
  export type FormatObject = KeyValueMap<string[]>;
38
23
  export type RichTextConfig = boolean | ContentfulRichtextOptions | ((document: Document, transformContext: TransformContext, runtimeContext: RuntimeContext) => unknown);
39
- export type ContentfulConfig = {
40
- spaceId: string;
41
- environmentId: string;
42
- managementToken: string;
43
- previewAccessToken: string;
44
- accessToken: string;
45
- host?: string;
46
- preview?: boolean;
24
+ export type SsgContentfulConfig = ContentfulConfig & {
47
25
  sync?: boolean;
48
- query?: QueryOptions;
49
26
  };
50
27
  export type ContentfulRcConfig = {
51
28
  managementToken: string;
@@ -68,7 +45,9 @@ export type Hooks = {
68
45
  mapAssetLink?: TransformHook<KeyValueMap>;
69
46
  mapEntryLink?: TransformHook<KeyValueMap>;
70
47
  };
71
- export type Config = Partial<ContentfulConfig> & Hooks & {
48
+ export type Config = Partial<ContentfulConfig & {
49
+ sync?: boolean;
50
+ }> & Hooks & {
72
51
  rootDir?: string;
73
52
  directory: string;
74
53
  managedDirectories?: string[];
@@ -89,7 +68,6 @@ export type PluginModule = {
89
68
  default?: PluginSource;
90
69
  } & Partial<Hooks>;
91
70
  export type PluginSource = Hooks | ((options?: KeyValueMap) => Promise<Hooks> | Hooks);
92
- export type FieldSettings = KeyValueMap<KeyValueMap<Field>>;
93
71
  export type ContentfulData = {
94
72
  fieldSettings: FieldSettings;
95
73
  locales: Locale[];
@@ -210,19 +188,6 @@ export type CollectOptions = {
210
188
  getNextId?: (entry: Entry) => string;
211
189
  getValue?: (entry: Entry) => any;
212
190
  };
213
- export type CollectionResponse<T> = EntryCollection | ContentfulCollection<T>;
214
- export type PagedGetOptions<T> = {
215
- method: string;
216
- skip?: number;
217
- aggregatedResponse?: CollectionResponse<T>;
218
- query?: QueryOptions;
219
- include?: number;
220
- };
221
- export type SyncOptions = {
222
- initial?: true;
223
- nextSyncToken?: string;
224
- resolveLinks?: boolean;
225
- };
226
191
  export type ErrorEntry = {
227
192
  spaceId: string;
228
193
  environmentId: string;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@jungvonmatt/contentful-ssg",
3
- "version": "5.0.0",
3
+ "version": "6.0.0",
4
4
  "description": "",
5
5
  "bugs": {
6
6
  "url": "https://github.com/jungvonmatt/contentful-ssg/issues"
@@ -62,41 +62,39 @@
62
62
  "scripts": {
63
63
  "clean": "rimraf ./dist",
64
64
  "lint": "oxlint --type-aware --fix src",
65
- "test": "vitest run",
65
+ "test": "vitest run --root ../.. packages/contentful-ssg/src",
66
66
  "precompile": "pnpm run clean",
67
67
  "compile": "tsc --build",
68
68
  "postcompile": "chmod +x ./dist/cli.js",
69
69
  "watch": "tsc --build --watch"
70
70
  },
71
71
  "dependencies": {
72
- "@contentful/rich-text-html-renderer": "^16.3.0",
73
- "@contentful/rich-text-types": "^16.3.0",
72
+ "@contentful/rich-text-html-renderer": "^17.2.2",
73
+ "@contentful/rich-text-types": "^17.2.7",
74
74
  "@iarna/toml": "^2.2.5",
75
- "@jungvonmatt/contentful-config": "5.0.0",
76
- "@swc/core": "^1.3.104",
75
+ "@jungvonmatt/contentful-client": "6.0.0",
76
+ "@jungvonmatt/contentful-config": "6.0.0",
77
+ "@swc/core": "^1.15.33",
77
78
  "chalk": "^5.3.0",
78
79
  "change-case": "^5.4.2",
79
- "commander": "^11.1.0",
80
- "contentful": "^11.7.15",
81
- "contentful-management": "^11.54.4",
80
+ "commander": "^14.0.3",
81
+ "contentful": "^11.12.2",
82
82
  "dlv": "^1.1.3",
83
- "exit-hook": "^4.0.0",
84
- "express": "^4.21.2",
85
- "find-cache-dir": "^5.0.0",
86
- "find-up": "^7.0.0",
83
+ "exit-hook": "^5.1.0",
84
+ "express": "^5.1.0",
85
+ "find-up": "^8.0.0",
87
86
  "fs-extra": "^11.1.0",
88
- "globby": "^14.0.0",
87
+ "globby": "^16.2.0",
89
88
  "gray-matter": "^4.0.3",
90
89
  "ignore": "^5.3.2",
91
- "inquirer": "^12.9.3",
90
+ "inquirer": "^13.4.3",
92
91
  "js-yaml": "^4.1.0",
93
92
  "listr": "^0.14.3",
94
93
  "micromatch": "^4.0.5",
95
94
  "oxfmt": "^0.47.0",
96
95
  "pirates": "^4.0.6",
97
- "read-pkg-up": "^11.0.0",
98
96
  "rxjs": "^7.8.1",
99
- "serialize-error": "^11.0.3",
97
+ "serialize-error": "^13.0.1",
100
98
  "slash": "^5.1.0",
101
99
  "type-fest": "^4.9.0",
102
100
  "uuid": "^14.0.0"
@@ -109,12 +107,12 @@
109
107
  "@types/js-yaml": "^4.0.4",
110
108
  "@types/listr": "^0.14.9",
111
109
  "@types/micromatch": "^4.0.6",
112
- "@types/node": "^20.11.5",
113
- "rimraf": "^5.0.5",
114
- "supertest": "^6.3.4",
110
+ "@types/node": "^22.15.0",
111
+ "rimraf": "^6.0.1",
112
+ "supertest": "^7.2.2",
115
113
  "ts-node": "^10.9.2",
116
114
  "typescript": "^5.3.3",
117
- "vitest": "^4.1.5"
115
+ "vitest": "^4.1.6"
118
116
  },
119
117
  "engines": {
120
118
  "node": ">=22"
@@ -124,5 +122,5 @@
124
122
  "module": "es2020"
125
123
  }
126
124
  },
127
- "gitHead": "dfbefe2c66877ed9411bdb242327e6915f58cf3e"
128
- }
125
+ "gitHead": "72a840af083dd2739517cd30c4a7b8277c462d81"
126
+ }
@@ -6,7 +6,7 @@ import {
6
6
  getFieldSettings,
7
7
  LINK_TYPE_ASSET,
8
8
  LINK_TYPE_ENTRY,
9
- } from '../lib/contentful.js';
9
+ } from '@jungvonmatt/contentful-client';
10
10
  import { FileManager } from '../lib/file-manager.js';
11
11
  import { HookManager } from '../lib/hook-manager.js';
12
12
  import type {
@@ -132,4 +132,4 @@ export const getTransformContext = (fixture: Partial<TransformContext> = {}): Tr
132
132
  assetMap: new Map(),
133
133
  entryMap: new Map(),
134
134
  ...fixture,
135
- }) as TransformContext;
135
+ }) as TransformContext;
@@ -0,0 +1,225 @@
1
+ import { vi, describe, test, expect, beforeEach, afterEach } from 'vitest';
2
+
3
+ const run = vi.fn();
4
+ const getConfig = vi.fn();
5
+ const initializeCache = vi.fn();
6
+ const outputFile = vi.fn();
7
+ const confirm = vi.fn();
8
+
9
+ vi.mock('./index.js', () => ({
10
+ run: (...args: unknown[]) => run(...args),
11
+ }));
12
+
13
+ vi.mock('./lib/config.js', () => ({
14
+ ALL_PROMPTS: ['spaceId', 'environmentId'],
15
+ getConfig: (...args: unknown[]) => getConfig(...args),
16
+ }));
17
+
18
+ vi.mock('./lib/cf-cache.js', () => ({
19
+ initializeCache: (...args: unknown[]) => initializeCache(...args),
20
+ }));
21
+
22
+ vi.mock('./lib/object.js', () => ({
23
+ omitKeys: (obj: Record<string, unknown>, ...keys: string[]) => {
24
+ const result = { ...obj };
25
+ for (const key of keys) {
26
+ delete result[key];
27
+ }
28
+ return result;
29
+ },
30
+ }));
31
+
32
+ vi.mock('./lib/ui.js', () => ({
33
+ confirm: (...args: unknown[]) => confirm(...args),
34
+ logError: vi.fn(),
35
+ }));
36
+
37
+ vi.mock('fs-extra', () => ({
38
+ outputFile: (...args: unknown[]) => outputFile(...args),
39
+ }));
40
+
41
+ vi.mock('fs', () => ({
42
+ existsSync: vi.fn().mockReturnValue(false),
43
+ }));
44
+
45
+ vi.mock('fs/promises', () => ({
46
+ readFile: vi.fn().mockResolvedValue(''),
47
+ }));
48
+
49
+ vi.mock('exit-hook', () => ({
50
+ asyncExitHook: vi.fn(),
51
+ gracefulExit: vi.fn(),
52
+ }));
53
+
54
+ vi.mock('oxfmt', () => ({
55
+ format: vi.fn().mockResolvedValue({ code: '// formatted' }),
56
+ }));
57
+
58
+ describe('contentful-ssg CLI', () => {
59
+ let originalArgv: string[];
60
+ let consoleLog: ReturnType<typeof vi.fn>;
61
+ const mockCache = {
62
+ hasSyncState: vi.fn().mockReturnValue(false),
63
+ getSyncState: vi.fn().mockResolvedValue({}),
64
+ setSyncState: vi.fn().mockResolvedValue(undefined),
65
+ reset: vi.fn().mockResolvedValue(undefined),
66
+ };
67
+
68
+ beforeEach(() => {
69
+ originalArgv = process.argv;
70
+ consoleLog = vi.fn();
71
+ vi.spyOn(console, 'log').mockImplementation(consoleLog);
72
+ vi.resetModules();
73
+ run.mockReset();
74
+ getConfig.mockReset();
75
+ initializeCache.mockReset();
76
+ outputFile.mockReset();
77
+ confirm.mockReset();
78
+ mockCache.hasSyncState.mockReturnValue(false);
79
+ initializeCache.mockReturnValue(mockCache);
80
+ });
81
+
82
+ afterEach(() => {
83
+ process.argv = originalArgv;
84
+ vi.restoreAllMocks();
85
+ });
86
+
87
+ describe('init command', () => {
88
+ test('initializes config and writes file', async () => {
89
+ getConfig.mockResolvedValue({
90
+ config: { spaceId: 'space-1', environmentId: 'master', directory: 'content' },
91
+ layers: [],
92
+ });
93
+ confirm.mockResolvedValue(true);
94
+
95
+ process.argv = ['node', 'cli', 'init'];
96
+ await import('./cli.js');
97
+ await new Promise((resolve) => setTimeout(resolve, 50));
98
+
99
+ expect(getConfig).toHaveBeenCalledWith(
100
+ expect.objectContaining({ cwd: expect.any(String) }),
101
+ expect.objectContaining({ prompt: ['spaceId', 'environmentId'] }),
102
+ );
103
+ expect(outputFile).toHaveBeenCalled();
104
+ });
105
+
106
+ test('init with --typescript flag generates ts config', async () => {
107
+ getConfig.mockResolvedValue({
108
+ config: { spaceId: 'space-1', environmentId: 'master', directory: 'content' },
109
+ layers: [],
110
+ });
111
+ confirm.mockResolvedValue(true);
112
+
113
+ process.argv = ['node', 'cli', 'init', '--typescript'];
114
+ await import('./cli.js');
115
+ await new Promise((resolve) => setTimeout(resolve, 50));
116
+
117
+ expect(outputFile).toHaveBeenCalledWith(expect.stringContaining('.ts'), expect.any(String));
118
+ });
119
+
120
+ test('init does not write file when user declines', async () => {
121
+ getConfig.mockResolvedValue({
122
+ config: { spaceId: 'space-1', environmentId: 'master', directory: 'content' },
123
+ layers: [],
124
+ });
125
+ confirm.mockResolvedValue(false);
126
+
127
+ process.argv = ['node', 'cli', 'init'];
128
+ await import('./cli.js');
129
+ await new Promise((resolve) => setTimeout(resolve, 50));
130
+
131
+ expect(outputFile).not.toHaveBeenCalled();
132
+ });
133
+ });
134
+
135
+ describe('fetch command', () => {
136
+ test('fetches content with default options', async () => {
137
+ getConfig.mockResolvedValue({ config: { spaceId: 'space-1' } });
138
+ run.mockResolvedValue({ entries: [] });
139
+
140
+ process.argv = ['node', 'cli', 'fetch'];
141
+ await import('./cli.js');
142
+ await new Promise((resolve) => setTimeout(resolve, 50));
143
+
144
+ expect(run).toHaveBeenCalledWith(
145
+ expect.objectContaining({ spaceId: 'space-1', sync: false }),
146
+ undefined,
147
+ );
148
+ });
149
+
150
+ test('fetch with --sync uses cache', async () => {
151
+ getConfig.mockResolvedValue({ config: { spaceId: 'space-1' } });
152
+ run.mockResolvedValue({ entries: [] });
153
+ mockCache.hasSyncState.mockReturnValue(true);
154
+ mockCache.getSyncState.mockResolvedValue({ entries: ['prev'] });
155
+
156
+ process.argv = ['node', 'cli', 'fetch', '--sync'];
157
+ await import('./cli.js');
158
+ await new Promise((resolve) => setTimeout(resolve, 50));
159
+
160
+ expect(run).toHaveBeenCalledWith(expect.objectContaining({ sync: true }), {
161
+ entries: ['prev'],
162
+ });
163
+ expect(mockCache.setSyncState).toHaveBeenCalled();
164
+ });
165
+
166
+ test('fetch without --sync resets cache', async () => {
167
+ getConfig.mockResolvedValue({ config: { spaceId: 'space-1' } });
168
+ run.mockResolvedValue({ entries: [] });
169
+
170
+ process.argv = ['node', 'cli', 'fetch'];
171
+ await import('./cli.js');
172
+ await new Promise((resolve) => setTimeout(resolve, 50));
173
+
174
+ expect(mockCache.reset).toHaveBeenCalled();
175
+ });
176
+
177
+ test('fetch with --preview passes preview mode', async () => {
178
+ getConfig.mockResolvedValue({ config: { preview: true } });
179
+ run.mockResolvedValue({ entries: [] });
180
+
181
+ process.argv = ['node', 'cli', 'fetch', '--preview'];
182
+ await import('./cli.js');
183
+ await new Promise((resolve) => setTimeout(resolve, 50));
184
+
185
+ expect(getConfig).toHaveBeenCalledWith(expect.objectContaining({ preview: true }));
186
+ });
187
+
188
+ test('fetch handles errors gracefully', async () => {
189
+ const { gracefulExit } = await import('exit-hook');
190
+ getConfig.mockRejectedValue(new Error('Config error'));
191
+
192
+ process.argv = ['node', 'cli', 'fetch'];
193
+ await import('./cli.js');
194
+ await new Promise((resolve) => setTimeout(resolve, 50));
195
+
196
+ expect(gracefulExit).toHaveBeenCalledWith(1);
197
+ });
198
+ });
199
+
200
+ describe('watch command', () => {
201
+ test('watch command runs with --poll', async () => {
202
+ getConfig.mockResolvedValue({ config: { spaceId: 'space-1' } });
203
+ run.mockResolvedValue({ entries: [] });
204
+
205
+ process.argv = ['node', 'cli', 'watch', '--poll'];
206
+ await import('./cli.js');
207
+ await new Promise((resolve) => setTimeout(resolve, 50));
208
+
209
+ expect(run).toHaveBeenCalledWith(expect.objectContaining({ sync: true }), undefined);
210
+ });
211
+
212
+ test('watch without --poll shows deprecation message', async () => {
213
+ getConfig.mockResolvedValue({ config: { spaceId: 'space-1' } });
214
+ run.mockResolvedValue({ entries: [] });
215
+
216
+ process.argv = ['node', 'cli', 'watch'];
217
+ await import('./cli.js');
218
+ await new Promise((resolve) => setTimeout(resolve, 50));
219
+
220
+ expect(consoleLog).toHaveBeenCalledWith(
221
+ expect.stringContaining('Local tunneling has been disabled'),
222
+ );
223
+ });
224
+ });
225
+ });
package/src/cli.ts CHANGED
@@ -4,7 +4,7 @@
4
4
  /* eslint-env node */
5
5
  import chalk from 'chalk';
6
6
  import { Command } from 'commander';
7
- import { type QueryOptions } from 'contentful-management/types.js';
7
+ import { type DeliveryQueryOptions } from '@jungvonmatt/contentful-client';
8
8
  import { asyncExitHook, gracefulExit } from 'exit-hook';
9
9
  import { existsSync } from 'fs';
10
10
  import { outputFile } from 'fs-extra';
@@ -18,7 +18,7 @@ import { omitKeys } from './lib/object.js';
18
18
  import { confirm, logError } from './lib/ui.js';
19
19
  import { type Config, type ContentfulConfig, type RunResult } from './types.js';
20
20
 
21
- const parseQuery = (query: string): QueryOptions => {
21
+ const parseQuery = (query: string): DeliveryQueryOptions => {
22
22
  if (!query) {
23
23
  return {};
24
24
  }
@@ -60,11 +60,11 @@ const errorHandler = (error: CommandError, silence: boolean) => {
60
60
 
61
61
  const actionRunner =
62
62
  (fn, log = true) =>
63
- (...args) =>
64
- // eslint-disable-next-line @typescript-eslint/no-unsafe-return
65
- fn(...args).catch((error) => {
66
- errorHandler(error, !log);
67
- });
63
+ (...args) =>
64
+ // eslint-disable-next-line @typescript-eslint/no-unsafe-return
65
+ fn(...args).catch((error) => {
66
+ errorHandler(error, !log);
67
+ });
68
68
  const program = new Command();
69
69
  program
70
70
  .command('init')
package/src/index.ts CHANGED
@@ -3,7 +3,7 @@ import Listr from 'listr';
3
3
  import { gracefulExit } from 'exit-hook';
4
4
  import { ReplaySubject } from 'rxjs';
5
5
  import { initializeCache } from './lib/cf-cache.js';
6
- import { getContentId, getContentTypeId } from './lib/contentful.js';
6
+ import { getContentId, getContentTypeId } from '@jungvonmatt/contentful-client';
7
7
  import { ValidationError } from './lib/error.js';
8
8
  import { collectParentValues, collectValues, waitFor } from './lib/utils.js';
9
9
  import { fetch } from './tasks/fetch.js';
@@ -208,7 +208,7 @@ export const run = async (
208
208
  title: locale.code,
209
209
  skip: (ctx: RuntimeContext) =>
210
210
  (ctx.localized?.get(locale.code)?.entryMap?.size ?? 0) +
211
- (ctx.localized?.get(locale.code)?.assetMap?.size ?? 0) ===
211
+ (ctx.localized?.get(locale.code)?.assetMap?.size ?? 0) ===
212
212
  0,
213
213
  async task() {
214
214
  const data = ctx.localized.get(locale.code);