@jungvonmatt/contentful-typings 1.12.6 → 1.14.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.
package/dist/cli.d.ts CHANGED
File without changes
package/dist/cli.js CHANGED
@@ -26,16 +26,18 @@ const program = new Command();
26
26
  program
27
27
  .command('generate')
28
28
  .description('Generate typescript definitions for contentful content types.')
29
- .option('-o, --output <filepath>', 'Specify output file', '@types/contentful.d.ts')
29
+ .option('-o, --output <filepath>', 'Specify output file', '@types/contentful.ts')
30
30
  .option('-l, --localized', 'Add localized types')
31
31
  .option('-d, --jsdoc', 'Add JSDoc comments')
32
- .option('-g, --typeguard ', 'Add type guards')
32
+ .option('-g, --typeguard', 'Add type guards')
33
+ .option('-l, --legacy', 'Use legacy types (before contentful@10)')
33
34
  .action(actionRunner(async (cmd) => {
34
35
  const output = cmd?.output ?? '';
35
36
  const typings = await generateTypings({
36
37
  typeguard: cmd.typeguard,
37
38
  jsdoc: cmd.jsdoc,
38
39
  localized: cmd.localized,
40
+ legacy: cmd.legacy,
39
41
  });
40
42
  await outputFile(output, typings);
41
43
  console.log(pico.green(` added: ${output}`));
package/dist/cli.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";AAGA,OAAO,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AACtC,OAAO,IAAI,MAAM,YAAY,CAAC;AAC9B,OAAO,EAAE,QAAQ,EAAE,MAAM,oCAAoC,CAAC;AAC9D,OAAO,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AACzC,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,MAAM,MAAM,QAAQ,CAAC;AAC5B,OAAO,EAAE,MAAM,EAAE,MAAM,eAAe,CAAC;AACvC,OAAO,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAE7C,MAAM,GAAG,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC;AAC5B,MAAM,CAAC,GAAG,CAAC,CAAC;AAYZ,MAAM,YAAY,GAAG,CAAC,KAAmB,EAAE,OAAgB,EAAE,EAAE;IAC7D,IAAI,CAAC,OAAO,EAAE;QACZ,MAAM,EAAE,MAAM,EAAE,GAAG,KAAK,CAAC;QACzB,QAAQ,CAAC,KAAK,CAAC,CAAC;QAChB,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,EAAE;YAC/B,QAAQ,CAAC,KAAK,CAAC,CAAC;QAClB,CAAC,CAAC,CAAC;KACJ;IAED,YAAY,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC;AAEF,MAAM,YAAY,GAChB,CAAC,EAAE,EAAE,GAAG,GAAG,IAAI,EAAE,EAAE,CACnB,CAAC,GAAG,IAAI,EAAE,EAAE,CAEV,EAAE,CAAC,GAAG,IAAI,CAAC,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE;IAC1B,YAAY,CAAC,KAAK,EAAE,CAAC,GAAG,CAAC,CAAC;AAC5B,CAAC,CAAC,CAAC;AAEP,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE,CAAC;AAE9B,OAAO;KACJ,OAAO,CAAC,UAAU,CAAC;KACnB,WAAW,CAAC,+DAA+D,CAAC;KAC5E,MAAM,CAAC,yBAAyB,EAAE,qBAAqB,EAAE,wBAAwB,CAAC;KAClF,MAAM,CAAC,iBAAiB,EAAE,qBAAqB,CAAC;KAChD,MAAM,CAAC,aAAa,EAAE,oBAAoB,CAAC;KAC3C,MAAM,CAAC,kBAAkB,EAAE,iBAAiB,CAAC;KAC7C,MAAM,CACL,YAAY,CAAC,KAAK,EAAE,GAAgB,EAAE,EAAE;IACtC,MAAM,MAAM,GAAW,GAAG,EAAE,MAAM,IAAI,EAAE,CAAC;IACzC,MAAM,OAAO,GAAG,MAAM,eAAe,CAAC;QACpC,SAAS,EAAE,GAAG,CAAC,SAAS;QACxB,KAAK,EAAE,GAAG,CAAC,KAAK;QAChB,SAAS,EAAE,GAAG,CAAC,SAAS;KACzB,CAAC,CAAC;IAEH,MAAM,UAAU,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAClC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,YAAY,MAAM,EAAE,CAAC,CAAC,CAAC;AAChD,CAAC,CAAC,CACH,CAAC;AAEJ,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC"}
1
+ {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";AAGA,OAAO,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AACtC,OAAO,IAAI,MAAM,YAAY,CAAC;AAC9B,OAAO,EAAE,QAAQ,EAAE,MAAM,oCAAoC,CAAC;AAC9D,OAAO,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AACzC,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,MAAM,MAAM,QAAQ,CAAC;AAC5B,OAAO,EAAE,MAAM,EAAE,MAAM,eAAe,CAAC;AACvC,OAAO,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAE7C,MAAM,GAAG,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC;AAC5B,MAAM,CAAC,GAAG,CAAC,CAAC;AAaZ,MAAM,YAAY,GAAG,CAAC,KAAmB,EAAE,OAAgB,EAAE,EAAE;IAC7D,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,MAAM,EAAE,MAAM,EAAE,GAAG,KAAK,CAAC;QACzB,QAAQ,CAAC,KAAK,CAAC,CAAC;QAChB,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,EAAE;YAC/B,QAAQ,CAAC,KAAK,CAAC,CAAC;QAClB,CAAC,CAAC,CAAC;IACL,CAAC;IAED,YAAY,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC;AAEF,MAAM,YAAY,GAChB,CAAC,EAAE,EAAE,GAAG,GAAG,IAAI,EAAE,EAAE,CACnB,CAAC,GAAG,IAAI,EAAE,EAAE,CAEV,EAAE,CAAC,GAAG,IAAI,CAAC,CAAC,KAAK,CAAC,CAAC,KAAmB,EAAE,EAAE;IACxC,YAAY,CAAC,KAAK,EAAE,CAAC,GAAG,CAAC,CAAC;AAC5B,CAAC,CAAC,CAAC;AAEP,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE,CAAC;AAE9B,OAAO;KACJ,OAAO,CAAC,UAAU,CAAC;KACnB,WAAW,CAAC,+DAA+D,CAAC;KAC5E,MAAM,CAAC,yBAAyB,EAAE,qBAAqB,EAAE,sBAAsB,CAAC;KAChF,MAAM,CAAC,iBAAiB,EAAE,qBAAqB,CAAC;KAChD,MAAM,CAAC,aAAa,EAAE,oBAAoB,CAAC;KAC3C,MAAM,CAAC,iBAAiB,EAAE,iBAAiB,CAAC;KAC5C,MAAM,CAAC,cAAc,EAAE,yCAAyC,CAAC;KACjE,MAAM,CACL,YAAY,CAAC,KAAK,EAAE,GAAgB,EAAE,EAAE;IACtC,MAAM,MAAM,GAAW,GAAG,EAAE,MAAM,IAAI,EAAE,CAAC;IACzC,MAAM,OAAO,GAAG,MAAM,eAAe,CAAC;QACpC,SAAS,EAAE,GAAG,CAAC,SAAS;QACxB,KAAK,EAAE,GAAG,CAAC,KAAK;QAChB,SAAS,EAAE,GAAG,CAAC,SAAS;QACxB,MAAM,EAAE,GAAG,CAAC,MAAM;KACnB,CAAC,CAAC;IAEH,MAAM,UAAU,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAClC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,YAAY,MAAM,EAAE,CAAC,CAAC,CAAC;AAChD,CAAC,CAAC,CACH,CAAC;AAEJ,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC"}
package/dist/index.d.ts CHANGED
@@ -1,7 +1,8 @@
1
- declare type Options = {
1
+ type Options = {
2
2
  localized?: boolean;
3
3
  jsdoc?: boolean;
4
4
  typeguard?: boolean;
5
+ legacy?: boolean;
5
6
  };
6
7
  export declare const generateTypings: (options?: Options) => Promise<string>;
7
8
  export {};
package/dist/index.js CHANGED
@@ -1,18 +1,36 @@
1
+ import path from 'node:path';
1
2
  import { getConfig } from '@jungvonmatt/contentful-ssg/lib/config';
2
3
  import { getEnvironment, pagedGet } from '@jungvonmatt/contentful-ssg/lib/contentful';
3
4
  import { askMissing } from '@jungvonmatt/contentful-ssg/lib/ui';
4
5
  import { CFDefinitionsBuilder } from 'cf-content-types-generator';
5
- import { DefaultContentTypeRenderer, JsDocRenderer, LocalizedContentTypeRenderer, TypeGuardRenderer, } from './renderer/index.js';
6
+ import { readPackageUp } from 'read-pkg-up';
7
+ import semiver from 'semiver';
8
+ import { DefaultContentTypeRenderer, V10ContentTypeRenderer, V10TypeGuardRenderer, JsDocRenderer, LocalizedContentTypeRenderer, TypeGuardRenderer, } from './renderer/index.js';
9
+ const isLegacyVersion = async (dir) => {
10
+ try {
11
+ const cwd = path.join(dir || process.cwd(), 'node_modules', 'contentful');
12
+ const { packageJson } = await readPackageUp({ cwd });
13
+ if (packageJson.name === 'contentful' &&
14
+ semiver(packageJson.version, '10.0.0-beta-v10.33') < 0) {
15
+ return true;
16
+ }
17
+ }
18
+ catch { }
19
+ return false;
20
+ };
6
21
  export const generateTypings = async (options = {}) => {
7
- const contentfulConfig = (await askMissing(await getConfig({
22
+ const contentfulConfig = await askMissing(await getConfig({
8
23
  previewAccessToken: '-',
9
24
  accessToken: '-',
10
- })));
25
+ }));
11
26
  const client = await getEnvironment(contentfulConfig);
12
27
  const { items: contentTypes } = await pagedGet(client, {
13
28
  method: 'getContentTypes',
14
29
  });
15
- const renderers = [new DefaultContentTypeRenderer()];
30
+ const legacyVersion = typeof options.legacy === 'undefined' ? await isLegacyVersion() : options.legacy;
31
+ const renderers = [
32
+ legacyVersion ? new DefaultContentTypeRenderer() : new V10ContentTypeRenderer(),
33
+ ];
16
34
  if (options.localized) {
17
35
  renderers.push(new LocalizedContentTypeRenderer());
18
36
  }
@@ -20,7 +38,7 @@ export const generateTypings = async (options = {}) => {
20
38
  renderers.push(new JsDocRenderer());
21
39
  }
22
40
  if (options.typeguard) {
23
- renderers.push(new TypeGuardRenderer());
41
+ renderers.push(legacyVersion ? new TypeGuardRenderer() : new V10TypeGuardRenderer());
24
42
  }
25
43
  const builder = new CFDefinitionsBuilder(renderers);
26
44
  for (const model of contentTypes) {
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,SAAS,EAAE,MAAM,wCAAwC,CAAC;AACnE,OAAO,EAAE,cAAc,EAAE,QAAQ,EAAE,MAAM,4CAA4C,CAAC;AACtF,OAAO,EAAE,UAAU,EAAE,MAAM,oCAAoC,CAAC;AAChE,OAAO,EAAE,oBAAoB,EAAuB,MAAM,4BAA4B,CAAC;AAEvF,OAAO,EACL,0BAA0B,EAC1B,aAAa,EACb,4BAA4B,EAC5B,iBAAiB,GAClB,MAAM,qBAAqB,CAAC;AAQ7B,MAAM,CAAC,MAAM,eAAe,GAAG,KAAK,EAAE,UAAmB,EAAE,EAAE,EAAE;IAC7D,MAAM,gBAAgB,GAAqB,CAAC,MAAM,UAAU,CAC1D,MAAM,SAAS,CAAC;QACd,kBAAkB,EAAE,GAAG;QACvB,WAAW,EAAE,GAAG;KACjB,CAAC,CACH,CAAqB,CAAC;IAEvB,MAAM,MAAM,GAAG,MAAM,cAAc,CAAC,gBAAgB,CAAC,CAAC;IAEtD,MAAM,EAAE,KAAK,EAAE,YAAY,EAAE,GAAG,MAAM,QAAQ,CAAc,MAAM,EAAE;QAClE,MAAM,EAAE,iBAAiB;KAC1B,CAAC,CAAC;IAEH,MAAM,SAAS,GAA0B,CAAC,IAAI,0BAA0B,EAAE,CAAC,CAAC;IAC5E,IAAI,OAAO,CAAC,SAAS,EAAE;QACrB,SAAS,CAAC,IAAI,CAAC,IAAI,4BAA4B,EAAE,CAAC,CAAC;KACpD;IAED,IAAI,OAAO,CAAC,KAAK,EAAE;QACjB,SAAS,CAAC,IAAI,CAAC,IAAI,aAAa,EAAE,CAAC,CAAC;KACrC;IAED,IAAI,OAAO,CAAC,SAAS,EAAE;QACrB,SAAS,CAAC,IAAI,CAAC,IAAI,iBAAiB,EAAE,CAAC,CAAC;KACzC;IAED,MAAM,OAAO,GAAG,IAAI,oBAAoB,CAAC,SAAS,CAAC,CAAC;IAEpD,KAAK,MAAM,KAAK,IAAI,YAAY,EAAE;QAChC,OAAO,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;KAC3B;IAED,OAAO,OAAO,CAAC,QAAQ,EAAE,CAAC;AAC5B,CAAC,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,IAAI,MAAM,WAAW,CAAC;AAE7B,OAAO,EAAE,SAAS,EAAE,MAAM,wCAAwC,CAAC;AACnE,OAAO,EAAE,cAAc,EAAE,QAAQ,EAAE,MAAM,4CAA4C,CAAC;AACtF,OAAO,EAAE,UAAU,EAAE,MAAM,oCAAoC,CAAC;AAChE,OAAO,EAAE,oBAAoB,EAA4B,MAAM,4BAA4B,CAAC;AAC5F,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,OAAO,MAAM,SAAS,CAAC;AAE9B,OAAO,EACL,0BAA0B,EAC1B,sBAAsB,EACtB,oBAAoB,EACpB,aAAa,EACb,4BAA4B,EAC5B,iBAAiB,GAClB,MAAM,qBAAqB,CAAC;AAS7B,MAAM,eAAe,GAAG,KAAK,EAAE,GAAY,EAAE,EAAE;IAC7C,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,IAAI,OAAO,CAAC,GAAG,EAAE,EAAE,cAAc,EAAE,YAAY,CAAC,CAAC;QAC1E,MAAM,EAAE,WAAW,EAAE,GAAG,MAAM,aAAa,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC;QAErD,IACE,WAAW,CAAC,IAAI,KAAK,YAAY;YAEjC,OAAO,CAAC,WAAW,CAAC,OAAO,EAAE,oBAAoB,CAAC,GAAG,CAAC,EACtD,CAAC;YACD,OAAO,IAAI,CAAC;QACd,CAAC;IACH,CAAC;IAAC,MAAM,CAAC,CAAA,CAAC;IAEV,OAAO,KAAK,CAAC;AACf,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,eAAe,GAAG,KAAK,EAAE,UAAmB,EAAE,EAAE,EAAE;IAC7D,MAAM,gBAAgB,GAAG,MAAM,UAAU,CACvC,MAAM,SAAS,CAAC;QACd,kBAAkB,EAAE,GAAG;QACvB,WAAW,EAAE,GAAG;KACjB,CAAC,CACH,CAAC;IAEF,MAAM,MAAM,GAAG,MAAM,cAAc,CAAC,gBAAoC,CAAC,CAAC;IAE1E,MAAM,EAAE,KAAK,EAAE,YAAY,EAAE,GAAG,MAAM,QAAQ,CAAc,MAAM,EAAE;QAClE,MAAM,EAAE,iBAAiB;KAC1B,CAAC,CAAC;IAEH,MAAM,aAAa,GACjB,OAAO,OAAO,CAAC,MAAM,KAAK,WAAW,CAAC,CAAC,CAAC,MAAM,eAAe,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC;IAEnF,MAAM,SAAS,GAA0B;QACvC,aAAa,CAAC,CAAC,CAAC,IAAI,0BAA0B,EAAE,CAAC,CAAC,CAAC,IAAI,sBAAsB,EAAE;KAChF,CAAC;IACF,IAAI,OAAO,CAAC,SAAS,EAAE,CAAC;QACtB,SAAS,CAAC,IAAI,CAAC,IAAI,4BAA4B,EAAE,CAAC,CAAC;IACrD,CAAC;IAED,IAAI,OAAO,CAAC,KAAK,EAAE,CAAC;QAClB,SAAS,CAAC,IAAI,CAAC,IAAI,aAAa,EAAE,CAAC,CAAC;IACtC,CAAC;IAED,IAAI,OAAO,CAAC,SAAS,EAAE,CAAC;QACtB,SAAS,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI,iBAAiB,EAAE,CAAC,CAAC,CAAC,IAAI,oBAAoB,EAAE,CAAC,CAAC;IACvF,CAAC;IAED,MAAM,OAAO,GAAG,IAAI,oBAAoB,CAAC,SAAS,CAAC,CAAC;IAEpD,KAAK,MAAM,KAAK,IAAI,YAAY,EAAE,CAAC;QACjC,OAAO,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;IAC5B,CAAC;IAED,OAAO,OAAO,CAAC,QAAQ,EAAE,CAAC;AAC5B,CAAC,CAAC"}
@@ -1,4 +1,7 @@
1
- import { DefaultContentTypeRenderer as DefaultContentTypeRendererOriginal, RenderContext } from 'cf-content-types-generator';
1
+ import { DefaultContentTypeRenderer as DefaultContentTypeRendererOriginal, V10ContentTypeRenderer as V10ContentTypeRendererOriginal, type RenderContext } from 'cf-content-types-generator';
2
2
  export declare class DefaultContentTypeRenderer extends DefaultContentTypeRendererOriginal {
3
3
  createContext(): RenderContext;
4
4
  }
5
+ export declare class V10ContentTypeRenderer extends V10ContentTypeRendererOriginal {
6
+ createContext(): RenderContext;
7
+ }
@@ -1,8 +1,13 @@
1
- import { DefaultContentTypeRenderer as DefaultContentTypeRendererOriginal, } from 'cf-content-types-generator';
2
- import { context } from './context.js';
1
+ import { DefaultContentTypeRenderer as DefaultContentTypeRendererOriginal, V10ContentTypeRenderer as V10ContentTypeRendererOriginal, } from 'cf-content-types-generator';
2
+ import { context, v10context } from './context.js';
3
3
  export class DefaultContentTypeRenderer extends DefaultContentTypeRendererOriginal {
4
4
  createContext() {
5
5
  return context;
6
6
  }
7
7
  }
8
+ export class V10ContentTypeRenderer extends V10ContentTypeRendererOriginal {
9
+ createContext() {
10
+ return v10context;
11
+ }
12
+ }
8
13
  //# sourceMappingURL=contentTypeRenderer.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"contentTypeRenderer.js","sourceRoot":"","sources":["../../src/renderer/contentTypeRenderer.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,0BAA0B,IAAI,kCAAkC,GAEjE,MAAM,4BAA4B,CAAC;AACpC,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAEvC,MAAM,OAAO,0BAA2B,SAAQ,kCAAkC;IACzE,aAAa;QAClB,OAAO,OAAO,CAAC;IACjB,CAAC;CACF"}
1
+ {"version":3,"file":"contentTypeRenderer.js","sourceRoot":"","sources":["../../src/renderer/contentTypeRenderer.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,0BAA0B,IAAI,kCAAkC,EAChE,sBAAsB,IAAI,8BAA8B,GAEzD,MAAM,4BAA4B,CAAC;AACpC,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAEnD,MAAM,OAAO,0BAA2B,SAAQ,kCAAkC;IACzE,aAAa;QAClB,OAAO,OAAO,CAAC;IACjB,CAAC;CACF;AAED,MAAM,OAAO,sBAAuB,SAAQ,8BAA8B;IACjE,aAAa;QAClB,OAAO,UAAU,CAAC;IACpB,CAAC;CACF"}
@@ -1,4 +1,6 @@
1
- import { RenderContext } from 'cf-content-types-generator';
1
+ import { type RenderContext } from 'cf-content-types-generator';
2
2
  export declare const moduleName: (name: string) => string;
3
3
  export declare const moduleFieldsName: (name: string) => string;
4
+ export declare const moduleSkeletonName: (name: string) => string;
4
5
  export declare const context: RenderContext;
6
+ export declare const v10context: RenderContext;
@@ -1,6 +1,18 @@
1
- import camelcase from 'camelcase';
2
- import { createDefaultContext } from 'cf-content-types-generator';
3
- export const moduleName = (name) => `${camelcase(name, { pascalCase: true })}`;
1
+ import { pascalCase } from 'change-case';
2
+ import { createDefaultContext, createV10Context, } from 'cf-content-types-generator';
3
+ export const moduleName = (name) => `${pascalCase(name)}`;
4
4
  export const moduleFieldsName = (name) => `${moduleName(name)}Fields`;
5
- export const context = { ...createDefaultContext(), moduleName, moduleFieldsName };
5
+ export const moduleSkeletonName = (name) => `${moduleName(name)}Skeleton`;
6
+ export const context = {
7
+ ...createDefaultContext(),
8
+ moduleName,
9
+ moduleFieldsName,
10
+ moduleSkeletonName,
11
+ };
12
+ export const v10context = {
13
+ ...createV10Context(),
14
+ moduleName,
15
+ moduleFieldsName,
16
+ moduleSkeletonName,
17
+ };
6
18
  //# sourceMappingURL=context.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"context.js","sourceRoot":"","sources":["../../src/renderer/context.ts"],"names":[],"mappings":"AAAA,OAAO,SAAS,MAAM,WAAW,CAAC;AAClC,OAAO,EAAE,oBAAoB,EAAiB,MAAM,4BAA4B,CAAC;AAEjF,MAAM,CAAC,MAAM,UAAU,GAAG,CAAC,IAAY,EAAE,EAAE,CAAC,GAAG,SAAS,CAAC,IAAI,EAAE,EAAE,UAAU,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC;AACvF,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAC,IAAY,EAAE,EAAE,CAAC,GAAG,UAAU,CAAC,IAAI,CAAC,QAAQ,CAAC;AAC9E,MAAM,CAAC,MAAM,OAAO,GAAkB,EAAE,GAAG,oBAAoB,EAAE,EAAE,UAAU,EAAE,gBAAgB,EAAE,CAAC"}
1
+ {"version":3,"file":"context.js","sourceRoot":"","sources":["../../src/renderer/context.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EACL,oBAAoB,EACpB,gBAAgB,GAEjB,MAAM,4BAA4B,CAAC;AAEpC,MAAM,CAAC,MAAM,UAAU,GAAG,CAAC,IAAY,EAAE,EAAE,CAAC,GAAG,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;AAClE,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAC,IAAY,EAAE,EAAE,CAAC,GAAG,UAAU,CAAC,IAAI,CAAC,QAAQ,CAAC;AAC9E,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC,IAAY,EAAU,EAAE,CAAC,GAAG,UAAU,CAAC,IAAI,CAAC,UAAU,CAAC;AAC1F,MAAM,CAAC,MAAM,OAAO,GAAkB;IACpC,GAAG,oBAAoB,EAAE;IACzB,UAAU;IACV,gBAAgB;IAChB,kBAAkB;CACnB,CAAC;AACF,MAAM,CAAC,MAAM,UAAU,GAAkB;IACvC,GAAG,gBAAgB,EAAE;IACrB,UAAU;IACV,gBAAgB;IAChB,kBAAkB;CACnB,CAAC"}
@@ -1,4 +1,4 @@
1
- export { DefaultContentTypeRenderer } from './contentTypeRenderer.js';
1
+ export { DefaultContentTypeRenderer, V10ContentTypeRenderer } from './contentTypeRenderer.js';
2
2
  export { JsDocRenderer } from './jsDocRenderer.js';
3
- export { TypeGuardRenderer } from './typeGuardRenderer.js';
3
+ export { TypeGuardRenderer, V10TypeGuardRenderer } from './typeGuardRenderer.js';
4
4
  export { LocalizedContentTypeRenderer } from './localizedContentRenderer.js';
@@ -1,5 +1,5 @@
1
- export { DefaultContentTypeRenderer } from './contentTypeRenderer.js';
1
+ export { DefaultContentTypeRenderer, V10ContentTypeRenderer } from './contentTypeRenderer.js';
2
2
  export { JsDocRenderer } from './jsDocRenderer.js';
3
- export { TypeGuardRenderer } from './typeGuardRenderer.js';
3
+ export { TypeGuardRenderer, V10TypeGuardRenderer } from './typeGuardRenderer.js';
4
4
  export { LocalizedContentTypeRenderer } from './localizedContentRenderer.js';
5
5
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/renderer/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,0BAA0B,EAAE,MAAM,0BAA0B,CAAC;AACtE,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAC3D,OAAO,EAAE,4BAA4B,EAAE,MAAM,+BAA+B,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/renderer/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,0BAA0B,EAAE,sBAAsB,EAAE,MAAM,0BAA0B,CAAC;AAC9F,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,EAAE,iBAAiB,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AACjF,OAAO,EAAE,4BAA4B,EAAE,MAAM,+BAA+B,CAAC"}
@@ -1,4 +1,4 @@
1
- import { JsDocRenderer as JsDocRendererOriginal, RenderContext } from 'cf-content-types-generator';
1
+ import { JsDocRenderer as JsDocRendererOriginal, type RenderContext } from 'cf-content-types-generator';
2
2
  export declare class JsDocRenderer extends JsDocRendererOriginal {
3
3
  createContext(): RenderContext;
4
4
  }
@@ -1,4 +1,4 @@
1
- import { JsDocRenderer as JsDocRendererOriginal } from 'cf-content-types-generator';
1
+ import { JsDocRenderer as JsDocRendererOriginal, } from 'cf-content-types-generator';
2
2
  import { context } from './context.js';
3
3
  export class JsDocRenderer extends JsDocRendererOriginal {
4
4
  createContext() {
@@ -1 +1 @@
1
- {"version":3,"file":"jsDocRenderer.js","sourceRoot":"","sources":["../../src/renderer/jsDocRenderer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,IAAI,qBAAqB,EAAiB,MAAM,4BAA4B,CAAC;AACnG,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAEvC,MAAM,OAAO,aAAc,SAAQ,qBAAqB;IAC/C,aAAa;QAClB,OAAO,OAAO,CAAC;IACjB,CAAC;CACF"}
1
+ {"version":3,"file":"jsDocRenderer.js","sourceRoot":"","sources":["../../src/renderer/jsDocRenderer.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,aAAa,IAAI,qBAAqB,GAEvC,MAAM,4BAA4B,CAAC;AACpC,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAEvC,MAAM,OAAO,aAAc,SAAQ,qBAAqB;IAC/C,aAAa;QAClB,OAAO,OAAO,CAAC;IACjB,CAAC;CACF"}
@@ -1,4 +1,4 @@
1
- import { LocalizedContentTypeRenderer as LocalizedContentTypeRendererOriginal, RenderContext } from 'cf-content-types-generator';
1
+ import { LocalizedContentTypeRenderer as LocalizedContentTypeRendererOriginal, type RenderContext } from 'cf-content-types-generator';
2
2
  export declare class LocalizedContentTypeRenderer extends LocalizedContentTypeRendererOriginal {
3
3
  createContext(): RenderContext;
4
4
  }
File without changes
File without changes
@@ -1,6 +1,10 @@
1
- import { TypeGuardRenderer as TypeGuardRendererOriginal, RenderContext, CFContentType } from 'cf-content-types-generator';
2
- import { SourceFile } from 'ts-morph';
1
+ import { TypeGuardRenderer as TypeGuardRendererOriginal, V10TypeGuardRenderer as V10TypeGuardRendererOriginal, type RenderContext, type CFContentType } from 'cf-content-types-generator';
2
+ import { type SourceFile } from 'ts-morph';
3
3
  export declare class TypeGuardRenderer extends TypeGuardRendererOriginal {
4
4
  createContext(): RenderContext;
5
5
  render: (contentType: CFContentType, file: SourceFile) => void;
6
6
  }
7
+ export declare class V10TypeGuardRenderer extends V10TypeGuardRendererOriginal {
8
+ createContext(): RenderContext;
9
+ render: (contentType: CFContentType, file: SourceFile) => void;
10
+ }
@@ -1,5 +1,5 @@
1
- import { TypeGuardRenderer as TypeGuardRendererOriginal, } from 'cf-content-types-generator';
2
- import { context, moduleName } from './context.js';
1
+ import { TypeGuardRenderer as TypeGuardRendererOriginal, V10TypeGuardRenderer as V10TypeGuardRendererOriginal, renderTypeGeneric, } from 'cf-content-types-generator';
2
+ import { context, v10context, moduleName } from './context.js';
3
3
  export class TypeGuardRenderer extends TypeGuardRendererOriginal {
4
4
  createContext() {
5
5
  return context;
@@ -29,4 +29,33 @@ export class TypeGuardRenderer extends TypeGuardRendererOriginal {
29
29
  file.formatText();
30
30
  };
31
31
  }
32
+ export class V10TypeGuardRenderer extends V10TypeGuardRendererOriginal {
33
+ createContext() {
34
+ return v10context;
35
+ }
36
+ render = (contentType, file) => {
37
+ const entryInterfaceName = moduleName(contentType.sys.id);
38
+ file.addImportDeclaration({
39
+ moduleSpecifier: `contentful`,
40
+ namedImports: ['ChainModifiers', 'Entry', 'LocaleCode'],
41
+ isTypeOnly: true,
42
+ });
43
+ file.addFunction({
44
+ isExported: true,
45
+ name: renderTypeGeneric(`is${entryInterfaceName}`, 'Modifiers extends ChainModifiers', 'Locales extends LocaleCode'),
46
+ returnType: `entry is ${renderTypeGeneric(entryInterfaceName, 'Modifiers', 'Locales')}`,
47
+ parameters: [
48
+ {
49
+ name: 'entry',
50
+ type: renderTypeGeneric('Entry', 'EntrySkeletonType', 'Modifiers', 'Locales'),
51
+ },
52
+ ],
53
+ statements: `return entry.sys.contentType.sys.id === '${contentType.sys.id}'`,
54
+ });
55
+ file.organizeImports({
56
+ ensureNewLineAtEndOfFile: true,
57
+ });
58
+ file.formatText();
59
+ };
60
+ }
32
61
  //# sourceMappingURL=typeGuardRenderer.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"typeGuardRenderer.js","sourceRoot":"","sources":["../../src/renderer/typeGuardRenderer.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,iBAAiB,IAAI,yBAAyB,GAG/C,MAAM,4BAA4B,CAAC;AAEpC,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAEnD,MAAM,OAAO,iBAAkB,SAAQ,yBAAyB;IACvD,aAAa;QAClB,OAAO,OAAO,CAAC;IACjB,CAAC;IAEM,MAAM,GAAG,CAAC,WAA0B,EAAE,IAAgB,EAAQ,EAAE;QACrE,MAAM,kBAAkB,GAAG,UAAU,CAAC,WAAW,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAE1D,IAAI,CAAC,oBAAoB,CAAC;YACxB,eAAe,EAAE,uBAAuB;YACxC,YAAY,EAAE,CAAC,qBAAqB,CAAC;YACrC,UAAU,EAAE,IAAI;SACjB,CAAC,CAAC;QAEH,IAAI,CAAC,WAAW,CAAC;YACf,UAAU,EAAE,IAAI;YAChB,IAAI,EAAE,KAAK,kBAAkB,EAAE;YAC/B,UAAU,EAAE,YAAY,kBAAkB,EAAE;YAC5C,UAAU,EAAE;gBACV;oBACE,IAAI,EAAE,OAAO;oBACb,IAAI,EAAE,qBAAqB;iBAC5B;aACF;YACD,UAAU,EAAE,4CAA4C,WAAW,CAAC,GAAG,CAAC,EAAE,GAAG;SAC9E,CAAC,CAAC;QAEH,IAAI,CAAC,eAAe,CAAC;YACnB,wBAAwB,EAAE,IAAI;SAC/B,CAAC,CAAC;QAEH,IAAI,CAAC,UAAU,EAAE,CAAC;IACpB,CAAC,CAAC;CACH"}
1
+ {"version":3,"file":"typeGuardRenderer.js","sourceRoot":"","sources":["../../src/renderer/typeGuardRenderer.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,iBAAiB,IAAI,yBAAyB,EAC9C,oBAAoB,IAAI,4BAA4B,EAGpD,iBAAiB,GAClB,MAAM,4BAA4B,CAAC;AAEpC,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAE/D,MAAM,OAAO,iBAAkB,SAAQ,yBAAyB;IACvD,aAAa;QAClB,OAAO,OAAO,CAAC;IACjB,CAAC;IAEM,MAAM,GAAG,CAAC,WAA0B,EAAE,IAAgB,EAAQ,EAAE;QACrE,MAAM,kBAAkB,GAAG,UAAU,CAAC,WAAW,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAE1D,IAAI,CAAC,oBAAoB,CAAC;YACxB,eAAe,EAAE,uBAAuB;YACxC,YAAY,EAAE,CAAC,qBAAqB,CAAC;YACrC,UAAU,EAAE,IAAI;SACjB,CAAC,CAAC;QAEH,IAAI,CAAC,WAAW,CAAC;YACf,UAAU,EAAE,IAAI;YAChB,IAAI,EAAE,KAAK,kBAAkB,EAAE;YAC/B,UAAU,EAAE,YAAY,kBAAkB,EAAE;YAC5C,UAAU,EAAE;gBACV;oBACE,IAAI,EAAE,OAAO;oBACb,IAAI,EAAE,qBAAqB;iBAC5B;aACF;YACD,UAAU,EAAE,4CAA4C,WAAW,CAAC,GAAG,CAAC,EAAE,GAAG;SAC9E,CAAC,CAAC;QAEH,IAAI,CAAC,eAAe,CAAC;YACnB,wBAAwB,EAAE,IAAI;SAC/B,CAAC,CAAC;QAEH,IAAI,CAAC,UAAU,EAAE,CAAC;IACpB,CAAC,CAAC;CACH;AAED,MAAM,OAAO,oBAAqB,SAAQ,4BAA4B;IAC7D,aAAa;QAClB,OAAO,UAAU,CAAC;IACpB,CAAC;IAEM,MAAM,GAAG,CAAC,WAA0B,EAAE,IAAgB,EAAQ,EAAE;QACrE,MAAM,kBAAkB,GAAG,UAAU,CAAC,WAAW,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAE1D,IAAI,CAAC,oBAAoB,CAAC;YACxB,eAAe,EAAE,YAAY;YAC7B,YAAY,EAAE,CAAC,gBAAgB,EAAE,OAAO,EAAE,YAAY,CAAC;YACvD,UAAU,EAAE,IAAI;SACjB,CAAC,CAAC;QAEH,IAAI,CAAC,WAAW,CAAC;YACf,UAAU,EAAE,IAAI;YAChB,IAAI,EAAE,iBAAiB,CACrB,KAAK,kBAAkB,EAAE,EACzB,kCAAkC,EAClC,4BAA4B,CAC7B;YACD,UAAU,EAAE,YAAY,iBAAiB,CAAC,kBAAkB,EAAE,WAAW,EAAE,SAAS,CAAC,EAAE;YACvF,UAAU,EAAE;gBACV;oBACE,IAAI,EAAE,OAAO;oBACb,IAAI,EAAE,iBAAiB,CAAC,OAAO,EAAE,mBAAmB,EAAE,WAAW,EAAE,SAAS,CAAC;iBAC9E;aACF;YACD,UAAU,EAAE,4CAA4C,WAAW,CAAC,GAAG,CAAC,EAAE,GAAG;SAC9E,CAAC,CAAC;QAEH,IAAI,CAAC,eAAe,CAAC;YACnB,wBAAwB,EAAE,IAAI;SAC/B,CAAC,CAAC;QAEH,IAAI,CAAC,UAAU,EAAE,CAAC;IACpB,CAAC,CAAC;CACH"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@jungvonmatt/contentful-typings",
3
- "version": "1.12.6",
3
+ "version": "1.14.0",
4
4
  "main": "./dist/index.js",
5
5
  "type": "module",
6
6
  "exports": "./dist/index.js",
@@ -15,7 +15,7 @@
15
15
  "access": "public"
16
16
  },
17
17
  "engines": {
18
- "node": "^14.16 || >=16.0.0"
18
+ "node": ">=18"
19
19
  },
20
20
  "scripts": {
21
21
  "clean": "rimraf ./dist",
@@ -37,20 +37,24 @@
37
37
  },
38
38
  "homepage": "https://github.com/jungvonmatt/contentful-ssg#readme",
39
39
  "dependencies": {
40
- "@jungvonmatt/contentful-ssg": "^1.12.3",
41
- "camelcase": "^7.0.1",
42
- "cf-content-types-generator": "^2.9.1",
43
- "commander": "^10.0.0",
44
- "contentful": "^9.3.3",
45
- "contentful-management": "^10.30.0",
46
- "dotenv": "^16.0.3",
40
+ "@faker-js/faker": "^8.3.1",
41
+ "@jungvonmatt/contentful-ssg": "^1.14.0",
42
+ "cf-content-types-generator": "^2.13.1",
43
+ "change-case": "^5.4.2",
44
+ "commander": "^11.1.0",
45
+ "contentful": "^10.2.0",
46
+ "contentful-management": "^11.12.1",
47
+ "dotenv": "^16.3.1",
47
48
  "dotenv-expand": "^10.0.0",
48
49
  "fs-extra": "^11.1.0",
49
50
  "picocolors": "^1.0.0",
50
- "prettier": "^2.8.4"
51
+ "prettier": "^3.2.4",
52
+ "read-pkg-up": "^11.0.0",
53
+ "semiver": "^1.1.0"
51
54
  },
52
55
  "devDependencies": {
53
- "ts-morph": "^17.0.1"
56
+ "@types/chance": "^1.1.6",
57
+ "ts-morph": "^19.0.0"
54
58
  },
55
- "gitHead": "02e07b8a12bed456b6609d4774d7b9bd6c4c0b98"
59
+ "gitHead": "4db0d37fb9851d2728628726691cd9b3becd4654"
56
60
  }
package/src/cli.ts CHANGED
@@ -15,9 +15,10 @@ expand(env);
15
15
 
16
16
  type CommandArgs = {
17
17
  output: string;
18
- typeguard: boolean;
19
- jsdoc: boolean;
20
- localized: boolean;
18
+ typeguard?: boolean;
19
+ jsdoc?: boolean;
20
+ localized?: boolean;
21
+ legacy?: boolean;
21
22
  };
22
23
 
23
24
  type CommandError = Error & {
@@ -39,7 +40,7 @@ const actionRunner =
39
40
  (fn, log = true) =>
40
41
  (...args) =>
41
42
  // eslint-disable-next-line @typescript-eslint/no-unsafe-return, @typescript-eslint/no-unsafe-call
42
- fn(...args).catch((error) => {
43
+ fn(...args).catch((error: CommandError) => {
43
44
  errorHandler(error, !log);
44
45
  });
45
46
 
@@ -48,10 +49,11 @@ const program = new Command();
48
49
  program
49
50
  .command('generate')
50
51
  .description('Generate typescript definitions for contentful content types.')
51
- .option('-o, --output <filepath>', 'Specify output file', '@types/contentful.d.ts')
52
+ .option('-o, --output <filepath>', 'Specify output file', '@types/contentful.ts')
52
53
  .option('-l, --localized', 'Add localized types')
53
54
  .option('-d, --jsdoc', 'Add JSDoc comments')
54
- .option('-g, --typeguard ', 'Add type guards')
55
+ .option('-g, --typeguard', 'Add type guards')
56
+ .option('-l, --legacy', 'Use legacy types (before contentful@10)')
55
57
  .action(
56
58
  actionRunner(async (cmd: CommandArgs) => {
57
59
  const output: string = cmd?.output ?? '';
@@ -59,11 +61,12 @@ program
59
61
  typeguard: cmd.typeguard,
60
62
  jsdoc: cmd.jsdoc,
61
63
  localized: cmd.localized,
64
+ legacy: cmd.legacy,
62
65
  });
63
66
 
64
67
  await outputFile(output, typings);
65
68
  console.log(pico.green(` added: ${output}`));
66
- })
69
+ }),
67
70
  );
68
71
 
69
72
  program.parse(process.argv);
package/src/index.ts CHANGED
@@ -1,12 +1,17 @@
1
1
  /* _eslint-disable @typescript-eslint/no-unsafe-call */
2
- import { ContentfulConfig, ContentType } from '@jungvonmatt/contentful-ssg';
2
+ import path from 'node:path';
3
+ import { type ContentfulConfig, type ContentType } from '@jungvonmatt/contentful-ssg';
3
4
  import { getConfig } from '@jungvonmatt/contentful-ssg/lib/config';
4
5
  import { getEnvironment, pagedGet } from '@jungvonmatt/contentful-ssg/lib/contentful';
5
6
  import { askMissing } from '@jungvonmatt/contentful-ssg/lib/ui';
6
- import { CFDefinitionsBuilder, ContentTypeRenderer } from 'cf-content-types-generator';
7
+ import { CFDefinitionsBuilder, type ContentTypeRenderer } from 'cf-content-types-generator';
8
+ import { readPackageUp } from 'read-pkg-up';
9
+ import semiver from 'semiver';
7
10
 
8
11
  import {
9
12
  DefaultContentTypeRenderer,
13
+ V10ContentTypeRenderer,
14
+ V10TypeGuardRenderer,
10
15
  JsDocRenderer,
11
16
  LocalizedContentTypeRenderer,
12
17
  TypeGuardRenderer,
@@ -16,23 +21,46 @@ type Options = {
16
21
  localized?: boolean;
17
22
  jsdoc?: boolean;
18
23
  typeguard?: boolean;
24
+ legacy?: boolean;
25
+ };
26
+
27
+ const isLegacyVersion = async (dir?: string) => {
28
+ try {
29
+ const cwd = path.join(dir || process.cwd(), 'node_modules', 'contentful');
30
+ const { packageJson } = await readPackageUp({ cwd });
31
+ // New skeleton types were released in contentful v10.0.0-beta-v10.33
32
+ if (
33
+ packageJson.name === 'contentful' &&
34
+ // eslint-disable-next-line @typescript-eslint/no-unsafe-enum-comparison
35
+ semiver(packageJson.version, '10.0.0-beta-v10.33') < 0
36
+ ) {
37
+ return true;
38
+ }
39
+ } catch {}
40
+
41
+ return false;
19
42
  };
20
43
 
21
44
  export const generateTypings = async (options: Options = {}) => {
22
- const contentfulConfig: ContentfulConfig = (await askMissing(
45
+ const contentfulConfig = await askMissing(
23
46
  await getConfig({
24
47
  previewAccessToken: '-',
25
48
  accessToken: '-',
26
- })
27
- )) as ContentfulConfig;
49
+ }),
50
+ );
28
51
 
29
- const client = await getEnvironment(contentfulConfig);
52
+ const client = await getEnvironment(contentfulConfig as ContentfulConfig);
30
53
 
31
54
  const { items: contentTypes } = await pagedGet<ContentType>(client, {
32
55
  method: 'getContentTypes',
33
56
  });
34
57
 
35
- const renderers: ContentTypeRenderer[] = [new DefaultContentTypeRenderer()];
58
+ const legacyVersion =
59
+ typeof options.legacy === 'undefined' ? await isLegacyVersion() : options.legacy;
60
+
61
+ const renderers: ContentTypeRenderer[] = [
62
+ legacyVersion ? new DefaultContentTypeRenderer() : new V10ContentTypeRenderer(),
63
+ ];
36
64
  if (options.localized) {
37
65
  renderers.push(new LocalizedContentTypeRenderer());
38
66
  }
@@ -42,7 +70,7 @@ export const generateTypings = async (options: Options = {}) => {
42
70
  }
43
71
 
44
72
  if (options.typeguard) {
45
- renderers.push(new TypeGuardRenderer());
73
+ renderers.push(legacyVersion ? new TypeGuardRenderer() : new V10TypeGuardRenderer());
46
74
  }
47
75
 
48
76
  const builder = new CFDefinitionsBuilder(renderers);
@@ -1,11 +1,18 @@
1
1
  import {
2
2
  DefaultContentTypeRenderer as DefaultContentTypeRendererOriginal,
3
- RenderContext,
3
+ V10ContentTypeRenderer as V10ContentTypeRendererOriginal,
4
+ type RenderContext,
4
5
  } from 'cf-content-types-generator';
5
- import { context } from './context.js';
6
+ import { context, v10context } from './context.js';
6
7
 
7
8
  export class DefaultContentTypeRenderer extends DefaultContentTypeRendererOriginal {
8
9
  public createContext(): RenderContext {
9
10
  return context;
10
11
  }
11
12
  }
13
+
14
+ export class V10ContentTypeRenderer extends V10ContentTypeRendererOriginal {
15
+ public createContext(): RenderContext {
16
+ return v10context;
17
+ }
18
+ }
@@ -1,6 +1,22 @@
1
- import camelcase from 'camelcase';
2
- import { createDefaultContext, RenderContext } from 'cf-content-types-generator';
1
+ import { pascalCase } from 'change-case';
2
+ import {
3
+ createDefaultContext,
4
+ createV10Context,
5
+ type RenderContext,
6
+ } from 'cf-content-types-generator';
3
7
 
4
- export const moduleName = (name: string) => `${camelcase(name, { pascalCase: true })}`;
8
+ export const moduleName = (name: string) => `${pascalCase(name)}`;
5
9
  export const moduleFieldsName = (name: string) => `${moduleName(name)}Fields`;
6
- export const context: RenderContext = { ...createDefaultContext(), moduleName, moduleFieldsName };
10
+ export const moduleSkeletonName = (name: string): string => `${moduleName(name)}Skeleton`;
11
+ export const context: RenderContext = {
12
+ ...createDefaultContext(),
13
+ moduleName,
14
+ moduleFieldsName,
15
+ moduleSkeletonName,
16
+ };
17
+ export const v10context: RenderContext = {
18
+ ...createV10Context(),
19
+ moduleName,
20
+ moduleFieldsName,
21
+ moduleSkeletonName,
22
+ };
@@ -1,4 +1,4 @@
1
- export { DefaultContentTypeRenderer } from './contentTypeRenderer.js';
1
+ export { DefaultContentTypeRenderer, V10ContentTypeRenderer } from './contentTypeRenderer.js';
2
2
  export { JsDocRenderer } from './jsDocRenderer.js';
3
- export { TypeGuardRenderer } from './typeGuardRenderer.js';
3
+ export { TypeGuardRenderer, V10TypeGuardRenderer } from './typeGuardRenderer.js';
4
4
  export { LocalizedContentTypeRenderer } from './localizedContentRenderer.js';
@@ -1,4 +1,7 @@
1
- import { JsDocRenderer as JsDocRendererOriginal, RenderContext } from 'cf-content-types-generator';
1
+ import {
2
+ JsDocRenderer as JsDocRendererOriginal,
3
+ type RenderContext,
4
+ } from 'cf-content-types-generator';
2
5
  import { context } from './context.js';
3
6
 
4
7
  export class JsDocRenderer extends JsDocRendererOriginal {
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  LocalizedContentTypeRenderer as LocalizedContentTypeRendererOriginal,
3
- RenderContext,
3
+ type RenderContext,
4
4
  } from 'cf-content-types-generator';
5
5
  import { context } from './context.js';
6
6
 
@@ -1,10 +1,12 @@
1
1
  import {
2
2
  TypeGuardRenderer as TypeGuardRendererOriginal,
3
- RenderContext,
4
- CFContentType,
3
+ V10TypeGuardRenderer as V10TypeGuardRendererOriginal,
4
+ type RenderContext,
5
+ type CFContentType,
6
+ renderTypeGeneric,
5
7
  } from 'cf-content-types-generator';
6
- import { SourceFile } from 'ts-morph';
7
- import { context, moduleName } from './context.js';
8
+ import { type SourceFile } from 'ts-morph';
9
+ import { context, v10context, moduleName } from './context.js';
8
10
 
9
11
  export class TypeGuardRenderer extends TypeGuardRendererOriginal {
10
12
  public createContext(): RenderContext {
@@ -40,3 +42,42 @@ export class TypeGuardRenderer extends TypeGuardRendererOriginal {
40
42
  file.formatText();
41
43
  };
42
44
  }
45
+
46
+ export class V10TypeGuardRenderer extends V10TypeGuardRendererOriginal {
47
+ public createContext(): RenderContext {
48
+ return v10context;
49
+ }
50
+
51
+ public render = (contentType: CFContentType, file: SourceFile): void => {
52
+ const entryInterfaceName = moduleName(contentType.sys.id);
53
+
54
+ file.addImportDeclaration({
55
+ moduleSpecifier: `contentful`,
56
+ namedImports: ['ChainModifiers', 'Entry', 'LocaleCode'],
57
+ isTypeOnly: true,
58
+ });
59
+
60
+ file.addFunction({
61
+ isExported: true,
62
+ name: renderTypeGeneric(
63
+ `is${entryInterfaceName}`,
64
+ 'Modifiers extends ChainModifiers',
65
+ 'Locales extends LocaleCode',
66
+ ),
67
+ returnType: `entry is ${renderTypeGeneric(entryInterfaceName, 'Modifiers', 'Locales')}`,
68
+ parameters: [
69
+ {
70
+ name: 'entry',
71
+ type: renderTypeGeneric('Entry', 'EntrySkeletonType', 'Modifiers', 'Locales'),
72
+ },
73
+ ],
74
+ statements: `return entry.sys.contentType.sys.id === '${contentType.sys.id}'`,
75
+ });
76
+
77
+ file.organizeImports({
78
+ ensureNewLineAtEndOfFile: true,
79
+ });
80
+
81
+ file.formatText();
82
+ };
83
+ }