@takeshape/schema 8.213.0 → 8.215.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 (100) hide show
  1. package/dist/create-input-schema.d.ts.map +1 -1
  2. package/dist/create-input-schema.js +8 -0
  3. package/dist/index.d.ts +1 -0
  4. package/dist/index.d.ts.map +1 -1
  5. package/dist/index.js +14 -0
  6. package/dist/interfaces.d.ts +10 -0
  7. package/dist/interfaces.d.ts.map +1 -0
  8. package/dist/interfaces.js +73 -0
  9. package/dist/migration/index.d.ts +2 -0
  10. package/dist/migration/index.d.ts.map +1 -1
  11. package/dist/migration/index.js +7 -1
  12. package/dist/migration/to/v3.20.0.d.ts +5 -0
  13. package/dist/migration/to/v3.20.0.d.ts.map +1 -0
  14. package/dist/migration/to/v3.20.0.js +34 -0
  15. package/dist/migration/to/v3.21.0.d.ts +5 -0
  16. package/dist/migration/to/v3.21.0.d.ts.map +1 -0
  17. package/dist/migration/to/v3.21.0.js +18 -0
  18. package/dist/project-schema/index.d.ts +7 -1
  19. package/dist/project-schema/index.d.ts.map +1 -1
  20. package/dist/project-schema/index.js +37 -3
  21. package/dist/project-schema/latest.d.ts +3 -1
  22. package/dist/project-schema/latest.d.ts.map +1 -1
  23. package/dist/project-schema/migrate.d.ts.map +1 -1
  24. package/dist/project-schema/migrate.js +8 -0
  25. package/dist/project-schema/v3.20.0.d.ts +1337 -0
  26. package/dist/project-schema/v3.20.0.d.ts.map +1 -0
  27. package/dist/project-schema/v3.20.0.js +5 -0
  28. package/dist/project-schema/v3.21.0.d.ts +1339 -0
  29. package/dist/project-schema/v3.21.0.d.ts.map +1 -0
  30. package/dist/project-schema/v3.21.0.js +5 -0
  31. package/dist/refs.d.ts +1 -1
  32. package/dist/refs.d.ts.map +1 -1
  33. package/dist/refs.js +2 -2
  34. package/dist/schema-util.d.ts +1 -1
  35. package/dist/schema-util.d.ts.map +1 -1
  36. package/dist/schema-util.js +9 -5
  37. package/dist/schemas/index.d.ts +2 -2
  38. package/dist/schemas/index.d.ts.map +1 -1
  39. package/dist/schemas/index.js +8 -4
  40. package/dist/schemas/index.ts +6 -2
  41. package/dist/schemas/project-schema/latest.json +9 -2
  42. package/dist/schemas/project-schema/v3.20.0.json +2363 -0
  43. package/dist/schemas/project-schema/v3.21.0.json +2370 -0
  44. package/dist/schemas/project-schema.json +6 -0
  45. package/dist/types/types.d.ts +2 -2
  46. package/dist/types/types.d.ts.map +1 -1
  47. package/dist/validate.d.ts.map +1 -1
  48. package/dist/validate.js +161 -4
  49. package/es/create-input-schema.js +7 -0
  50. package/es/index.js +2 -1
  51. package/es/interfaces.js +55 -0
  52. package/es/migration/index.js +5 -1
  53. package/es/migration/to/v3.20.0.js +24 -0
  54. package/es/migration/to/v3.21.0.js +10 -0
  55. package/es/project-schema/index.js +5 -1
  56. package/es/project-schema/migrate.js +9 -1
  57. package/es/project-schema/v3.20.0.js +1 -0
  58. package/es/project-schema/v3.21.0.js +1 -0
  59. package/es/refs.js +2 -2
  60. package/es/schema-util.js +9 -5
  61. package/es/schemas/index.js +5 -3
  62. package/es/schemas/index.ts +6 -2
  63. package/es/schemas/project-schema/latest.json +9 -2
  64. package/es/schemas/project-schema/v3.20.0.json +2363 -0
  65. package/es/schemas/project-schema/v3.21.0.json +2370 -0
  66. package/es/schemas/project-schema.json +6 -0
  67. package/es/validate.js +158 -5
  68. package/examples/latest/betzino.json +1 -1
  69. package/examples/latest/blog-schema.json +1 -1
  70. package/examples/latest/brewery-schema.json +1 -1
  71. package/examples/latest/complex-project-schema.json +1 -1
  72. package/examples/latest/complex-schema.json +1 -1
  73. package/examples/latest/fabric-ecommerce.json +3 -2
  74. package/examples/latest/frank-and-fred-schema.json +1 -1
  75. package/examples/latest/klirr-schema.json +1 -1
  76. package/examples/latest/massive-schema.json +1 -1
  77. package/examples/latest/mill-components-schema.json +1 -1
  78. package/examples/latest/one-earth.json +1 -1
  79. package/examples/latest/pet-oneof-array.json +1 -1
  80. package/examples/latest/post-schema.json +1 -1
  81. package/examples/latest/pruned-shopify-product-schema.json +3 -2
  82. package/examples/latest/real-world-schema.json +1 -1
  83. package/examples/latest/recursive-repeater-schema.json +1 -1
  84. package/examples/latest/recursive-schema.json +1 -1
  85. package/examples/latest/rick-and-morty-ast.json +1 -1
  86. package/examples/latest/rick-and-morty-graphql.json +1 -1
  87. package/examples/latest/rick-and-morty-rest.json +1 -1
  88. package/examples/latest/schema-with-repeater-draftjs.json +1 -1
  89. package/examples/latest/shape-books-v3_2_0.json +1 -1
  90. package/examples/latest/shape-books.json +1 -1
  91. package/examples/latest/shopify-lookbook.json +3 -2
  92. package/examples/latest/shopify-product-2022-07.json +26799 -1888
  93. package/examples/latest/shopify-store-with-widget.json +3 -2
  94. package/examples/latest/stripe-product-runtime-schema.json +4426 -0
  95. package/examples/latest/stripe-starter-resolved.json +1 -1
  96. package/examples/latest/user-schema-no-required.json +1 -1
  97. package/examples/latest/user-schema-with-defaults.json +1 -1
  98. package/examples/source/shopify-product-2022-07.json +26799 -1888
  99. package/examples/source/stripe-product-runtime-schema.json +4426 -0
  100. package/package.json +4 -4
@@ -87,6 +87,12 @@
87
87
  {
88
88
  "$ref": "https://schema.takeshape.io/project-schema/v3.19.0#"
89
89
  },
90
+ {
91
+ "$ref": "https://schema.takeshape.io/project-schema/v3.20.0#"
92
+ },
93
+ {
94
+ "$ref": "https://schema.takeshape.io/project-schema/v3.21.0#"
95
+ },
90
96
  {
91
97
  "$ref": "https://schema.takeshape.io/project-schema/v4.0.0#"
92
98
  }
@@ -1,5 +1,5 @@
1
1
  import type { SetRequired, Merge, PartialDeep, SetOptional } from 'type-fest';
2
- import type { ProjectSchema, ProjectSchemaV3_0_0, ProjectSchemaV3_1_0, ProjectSchemaV3_2_0, ProjectSchemaV3_3_0, ProjectSchemaV3_4_0, ProjectSchemaV3_5_0, ProjectSchemaV3_5_1, ProjectSchemaV3_6_0, ProjectSchemaV3_7_0, ProjectSchemaV3_8_0, ProjectSchemaV3_9_0, ProjectSchemaV3_10_0, ProjectSchemaV3_11_0, ProjectSchemaV3_12_0, ProjectSchemaV3_12_1, ProjectSchemaV3_12_2, ProjectSchemaV3_12_3, ProjectSchemaV3_13_0, ProjectSchemaV3_14_0, ProjectSchemaV3_15_0, ProjectSchemaV3_16_0, ProjectSchemaV3_17_0, ProjectSchemaV3_17_1, ProjectSchemaV3_18_0, ProjectSchemaV3_18_1, ProjectSchemaV3_18_2, ProjectSchemaV3_19_0, Query, PropertySchema, StoredServiceMap, ServiceConfig, OAuth2Authentication, CustomAuthentication, ServiceAuthentication, AnyProjectSchema, Ref } from '../project-schema';
2
+ import type { ProjectSchema, ProjectSchemaV3_0_0, ProjectSchemaV3_1_0, ProjectSchemaV3_2_0, ProjectSchemaV3_3_0, ProjectSchemaV3_4_0, ProjectSchemaV3_5_0, ProjectSchemaV3_5_1, ProjectSchemaV3_6_0, ProjectSchemaV3_7_0, ProjectSchemaV3_8_0, ProjectSchemaV3_9_0, ProjectSchemaV3_10_0, ProjectSchemaV3_11_0, ProjectSchemaV3_12_0, ProjectSchemaV3_12_1, ProjectSchemaV3_12_2, ProjectSchemaV3_12_3, ProjectSchemaV3_13_0, ProjectSchemaV3_14_0, ProjectSchemaV3_15_0, ProjectSchemaV3_16_0, ProjectSchemaV3_17_0, ProjectSchemaV3_17_1, ProjectSchemaV3_18_0, ProjectSchemaV3_18_1, ProjectSchemaV3_18_2, ProjectSchemaV3_19_0, ProjectSchemaV3_20_0, ProjectSchemaV3_21_0, Query, PropertySchema, StoredServiceMap, ServiceConfig, OAuth2Authentication, CustomAuthentication, ServiceAuthentication, AnyProjectSchema, Ref } from '../project-schema';
3
3
  import type { Overwrite } from '@takeshape/util';
4
4
  import { SERVICE_OBJECT_PATTERN_NAME } from '../schema-util';
5
5
  /**
@@ -7,7 +7,7 @@ import { SERVICE_OBJECT_PATTERN_NAME } from '../schema-util';
7
7
  * only type used in most runtime code. Updating this to a new version should
8
8
  * trigger type errors that clue you in to code that needs review.
9
9
  */
10
- export declare type ProjectSchemaV3X = ProjectSchemaV3_19_0 | ProjectSchemaV3_18_2 | ProjectSchemaV3_18_1 | ProjectSchemaV3_18_0 | ProjectSchemaV3_17_1 | ProjectSchemaV3_17_0 | ProjectSchemaV3_16_0 | ProjectSchemaV3_15_0 | ProjectSchemaV3_14_0 | ProjectSchemaV3_13_0 | ProjectSchemaV3_12_3 | ProjectSchemaV3_12_2 | ProjectSchemaV3_12_1 | ProjectSchemaV3_12_0 | ProjectSchemaV3_11_0 | ProjectSchemaV3_10_0 | ProjectSchemaV3_9_0 | ProjectSchemaV3_8_0 | ProjectSchemaV3_7_0 | ProjectSchemaV3_6_0 | ProjectSchemaV3_5_1 | ProjectSchemaV3_5_0 | ProjectSchemaV3_4_0 | ProjectSchemaV3_3_0 | ProjectSchemaV3_2_0 | ProjectSchemaV3_1_0 | ProjectSchemaV3_0_0;
10
+ export declare type ProjectSchemaV3X = ProjectSchemaV3_21_0 | ProjectSchemaV3_20_0 | ProjectSchemaV3_19_0 | ProjectSchemaV3_18_2 | ProjectSchemaV3_18_1 | ProjectSchemaV3_18_0 | ProjectSchemaV3_17_1 | ProjectSchemaV3_17_0 | ProjectSchemaV3_16_0 | ProjectSchemaV3_15_0 | ProjectSchemaV3_14_0 | ProjectSchemaV3_13_0 | ProjectSchemaV3_12_3 | ProjectSchemaV3_12_2 | ProjectSchemaV3_12_1 | ProjectSchemaV3_12_0 | ProjectSchemaV3_11_0 | ProjectSchemaV3_10_0 | ProjectSchemaV3_9_0 | ProjectSchemaV3_8_0 | ProjectSchemaV3_7_0 | ProjectSchemaV3_6_0 | ProjectSchemaV3_5_1 | ProjectSchemaV3_5_0 | ProjectSchemaV3_4_0 | ProjectSchemaV3_3_0 | ProjectSchemaV3_2_0 | ProjectSchemaV3_1_0 | ProjectSchemaV3_0_0;
11
11
  export declare const projectSchemaImportOptionalProps: readonly ["projectId", "created", "updated", "dataKey", "version", "locales", "defaultLocale", "author"];
12
12
  export declare type ProjectSchemaImport = SetOptional<AnyProjectSchema, typeof projectSchemaImportOptionalProps[number]>;
13
13
  export interface Content {
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/types/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAC,WAAW,EAAE,KAAK,EAAE,WAAW,EAAE,WAAW,EAAC,MAAM,WAAW,CAAC;AAC5E,OAAO,KAAK,EACV,aAAa,EACb,mBAAmB,EACnB,mBAAmB,EACnB,mBAAmB,EACnB,mBAAmB,EACnB,mBAAmB,EACnB,mBAAmB,EACnB,mBAAmB,EACnB,mBAAmB,EACnB,mBAAmB,EACnB,mBAAmB,EACnB,mBAAmB,EACnB,oBAAoB,EACpB,oBAAoB,EACpB,oBAAoB,EACpB,oBAAoB,EACpB,oBAAoB,EACpB,oBAAoB,EACpB,oBAAoB,EACpB,oBAAoB,EACpB,oBAAoB,EACpB,oBAAoB,EACpB,oBAAoB,EACpB,oBAAoB,EACpB,oBAAoB,EACpB,oBAAoB,EACpB,oBAAoB,EACpB,oBAAoB,EACpB,KAAK,EACL,cAAc,EACd,gBAAgB,EAChB,aAAa,EACb,oBAAoB,EACpB,oBAAoB,EACpB,qBAAqB,EACrB,gBAAgB,EAChB,GAAG,EACJ,MAAM,mBAAmB,CAAC;AAC3B,OAAO,KAAK,EAAC,SAAS,EAAC,MAAM,iBAAiB,CAAC;AAC/C,OAAO,EAAC,2BAA2B,EAAC,MAAM,gBAAgB,CAAC;AAE3D;;;;GAIG;AACH,oBAAY,gBAAgB,GACxB,oBAAoB,GACpB,oBAAoB,GACpB,oBAAoB,GACpB,oBAAoB,GACpB,oBAAoB,GACpB,oBAAoB,GACpB,oBAAoB,GACpB,oBAAoB,GACpB,oBAAoB,GACpB,oBAAoB,GACpB,oBAAoB,GACpB,oBAAoB,GACpB,oBAAoB,GACpB,oBAAoB,GACpB,oBAAoB,GACpB,oBAAoB,GACpB,mBAAmB,GACnB,mBAAmB,GACnB,mBAAmB,GACnB,mBAAmB,GACnB,mBAAmB,GACnB,mBAAmB,GACnB,mBAAmB,GACnB,mBAAmB,GACnB,mBAAmB,GACnB,mBAAmB,GACnB,mBAAmB,CAAC;AAExB,eAAO,MAAM,gCAAgC,0GASnC,CAAC;AAEX,oBAAY,mBAAmB,GAAG,WAAW,CAAC,gBAAgB,EAAE,OAAO,gCAAgC,CAAC,MAAM,CAAC,CAAC,CAAC;AAEjH,MAAM,WAAW,OAAO;IACtB,CAAC,IAAI,EAAE,MAAM,GAAG,GAAG,CAAC;IACpB,GAAG,EAAE,MAAM,CAAC;CACb;AAED,MAAM,WAAW,WAAW;IAC1B,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,UAAU,EAAE,MAAM,CAAC,OAAO,2BAA2B,EAAE,gBAAgB,GAAG,SAAS,CAAC,CAAC;CACtF;AAED,oBAAY,aAAa,GAAG,IAAI,CAAC,aAAa,EAAE,QAAQ,GAAG,SAAS,GAAG,WAAW,CAAC,CAAC;AAEpF;;GAEG;AAEH;;;GAGG;AACH,MAAM,WAAW,wBAAwB;IACvC,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,oBAAY,UAAU,GAAG,MAAM,CAAC;AAChC,oBAAY,UAAU,GAAG,GAAG,CAAC,UAAU,EAAE,aAAa,CAAC,CAAC;AAExD,MAAM,WAAW,gBAAgB;IAC/B,OAAO,EAAE,MAAM,CAAC;IAChB,cAAc,EAAE,MAAM,CAAC;IACvB,WAAW,EAAE,MAAM,CAAC;IACpB,iBAAiB,EAAE,MAAM,CAAC;CAC3B;AAED,oBAAY,OAAO,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC,CAAC;AAExD,aAAK,MAAM,GACP,KAAK,GACL,MAAM,GACN,KAAK,GACL,OAAO,GACP,MAAM,GACN,QAAQ,GACR,SAAS,GACT,OAAO,GACP,KAAK,GACL,MAAM,GACN,KAAK,GACL,OAAO,GACP,MAAM,GACN,QAAQ,GACR,SAAS,GACT,OAAO,CAAC;AAEZ,oBAAY,mBAAmB,GAC3B,MAAM,GACN,OAAO,CAAC;IACN,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,WAAW,EAAE,MAAM,EAAE,CAAC;IACtB,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,aAAa,EAAE,MAAM,CAAC;IACtB,YAAY,EAAE,MAAM,CAAC;IACrB,KAAK,EAAE,MAAM,CAAC;CACf,CAAC,CAAC;AAEP,oBAAY,iBAAiB,GAAG,SAAS,CACvC,aAAa,EACb;IACE,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE;QACP,QAAQ,EAAE,MAAM,CAAC;QACjB,OAAO,CAAC,EAAE,OAAO,CAAC;QAClB,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,KAAK,CAAC,EAAE,mBAAmB,CAAC;KAC7B,CAAC;CACH,CACF,CAAC;AAEF,oBAAY,oBAAoB,GAAG,SAAS,CAC1C,aAAa,EACb;IACE,WAAW,EAAE,SAAS,CAAC;IACvB,OAAO,EAAE;QACP,CAAC,IAAI,EAAE,MAAM,GAAG,GAAG,CAAC;QACpB,QAAQ,EAAE,MAAM,CAAC;QACjB,OAAO,CAAC,EAAE,OAAO,CAAC;QAClB,OAAO,CAAC,EAAE,MAAM,CAAC;KAClB,CAAC;CACH,CACF,CAAC;AAEF,oBAAY,oBAAoB,GAAG,KAAK,CACtC,aAAa,EACb;IACE,WAAW,EAAE,SAAS,CAAC;IACvB,OAAO,EAAE;QACP,QAAQ,EAAE,MAAM,CAAC;QACjB,IAAI,EAAE,MAAM,CAAC;QACb,OAAO,CAAC,EAAE,OAAO,CAAC;QAClB,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,KAAK,CAAC,EAAE,mBAAmB,CAAC;QAC5B,eAAe,CAAC,EAAE,OAAO,CAAC;KAC3B,CAAC;CACH,CACF,CAAC;AAEF,oBAAY,sBAAsB,GAAG,SAAS,CAC5C,aAAa,EACb;IACE,cAAc,EAAE,MAAM,CAAC;CACxB,CACF,CAAC;AAEF,oBAAY,qCAAqC,GAAG,KAAK,CACvD,aAAa,EACb;IACE,cAAc,EAAE,oBAAoB,CAAC;CACtC,CACF,CAAC;AAEF,oBAAY,qCAAqC,GAAG,KAAK,CACvD,aAAa,EACb;IACE,cAAc,EAAE,oBAAoB,CAAC;CACtC,CACF,CAAC;AAEF;;GAEG;AACH,oBAAY,2CAA2C,GAAG,SAAS,CACjE,aAAa,EACb;IACE,cAAc,CAAC,EAAE,qBAAqB,GAAG,IAAI,CAAC;CAC/C,CACF,CAAC;AAEF;;;GAGG;AACH,oBAAY,mBAAmB,GAAG,WAAW,CAC3C,WAAW,CAAC,2CAA2C,CAAC,EACxD,oBAAoB,CACrB,CAAC;AAEF,MAAM,WAAW,+BAAgC,SAAQ,aAAa;IACpE,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,gBAAgB,CAAC;CAC5B;AAED;;GAEG;AACH,oBAAY,OAAO;IACjB,MAAM,SAAS;IACf,IAAI,SAAS;CACd;AAED;;GAEG;AACH,MAAM,WAAW,aAAc,SAAQ,IAAI,CAAC,cAAc,EAAE,OAAO,CAAC;IAClE,KAAK,CAAC,EAAE,aAAa,CAAC;CACvB;AAED,oBAAY,aAAa,GAAG,cAAc,GAAG,aAAa,CAAC;AAE3D;;GAEG;AACH,oBAAY,QAAQ;IAClB,OAAO,UAAU;IACjB,IAAI,SAAS;CACd;AAED,oBAAY,cAAc,GAAG,cAAc,GAAG,KAAK,CAAC;AAEpD;;GAEG;AACH,oBAAY,kBAAkB,GAAG,MAAM,CAAC;AACxC,oBAAY,kBAAkB,GAAG,CAAC,kBAAkB,EAAE,cAAc,CAAC,CAAC;AACtE,oBAAY,sBAAsB,GAAG,kBAAkB,EAAE,CAAC;AAE1D,oBAAY,oBAAoB,GAAG,SAAS,CAC1C,aAAa,EACb;IACE,WAAW,EAAE,SAAS,CAAC;IACvB,QAAQ,EAAE,SAAS,CAAC;IACpB,OAAO,EAAE;QACP,IAAI,EAAE,MAAM,CAAC;QACb,QAAQ,EAAE,MAAM,CAAC;KAClB,CAAC;CACH,CACF,CAAC;AAEF,oBAAY,UAAU,GAAG,KAAK,CAAC,MAAM,GAAG,MAAM,CAAC,CAAC;AAEhD,oBAAY,oBAAoB,GAAG,IAAI,CAAC,aAAa,EAAE,QAAQ,GAAG,SAAS,GAAG,WAAW,CAAC,CAAC;AAE3F;;GAEG;AACH,oBAAY,SAAS,GAAG,GAAG,EAAE,CAAC;AAE9B;;GAEG;AACH,oBAAY,8BAA8B,GAAG,KAAK,CAChD,cAAc,EACd;IACE,WAAW,EAAE;QACX,IAAI,EAAE,sBAAsB,CAAC;QAC7B,OAAO,EAAE,iBAAiB,CAAC;QAC3B,OAAO,CAAC,EAAE;YACR,QAAQ,CAAC,EAAE,OAAO,CAAC;SACpB,CAAC;KACH,CAAC;CACH,CACF,CAAC;AAEF;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,UAAU,EAAE,OAAO,CAAC;IACpB,IAAI,EAAE,SAAS,CAAC;IAChB,gBAAgB,EAAE,OAAO,CAAC;IAC1B,iBAAiB,CAAC,EAAE,MAAM,CAAC;CAC5B;AAED;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,IAAI,CAAC,EAAE,QAAQ,GAAG,UAAU,CAAC;CAC9B;AAED,MAAM,WAAW,eAAe;IAC9B,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,gBAAgB,EAAE,OAAO,CAAC;IAC1B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,MAAM,EAAE,cAAc,CAAC;IACvB,SAAS,EAAE,MAAM,CAAC;CACnB"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/types/types.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"validate.d.ts","sourceRoot":"","sources":["../../src/validate.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAmB,WAAW,EAAC,MAAM,KAAK,CAAC;AACvD,OAAO,KAAK,EAAC,UAAU,EAAE,SAAS,EAAC,MAAM,gBAAgB,CAAC;AAC1D,OAAO,KAAK,EAAmB,mBAAmB,EAAC,MAAM,eAAe,CAAC;AACzE,OAAO,KAAK,EAEV,gBAAgB,EAChB,aAAa,EASb,iBAAiB,EAKlB,MAAM,kBAAkB,CAAC;AAI1B,OAAO,EAAwB,yBAAyB,EAAC,MAAM,mBAAmB,CAAC;AAofnF,oBAAY,sBAAsB,GAC9B;IAAC,KAAK,EAAE,IAAI,CAAC;IAAC,MAAM,EAAE,gBAAgB,CAAC;IAAC,MAAM,EAAE,SAAS,CAAA;CAAC,GAC1D;IAAC,KAAK,EAAE,KAAK,CAAC;IAAC,MAAM,EAAE,SAAS,CAAC;IAAC,MAAM,EAAE,yBAAyB,EAAE,CAAA;CAAC,CAAC;AAE3E,wBAAgB,WAAW,CAAC,KAAK,EAAE,WAAW,GAAG,yBAAyB,CAuBzE;AAED,MAAM,WAAW,UAAU;IACzB,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,CAAC,aAAa,CAAC,EAAE,MAAM,KAAK,OAAO,CAAC;IAC/C,QAAQ,EAAE,CAAC,MAAM,EAAE,OAAO,EAAE,OAAO,CAAC,EAAE,eAAe,KAAK,sBAAsB,CAAC;CAClF;AACD,MAAM,WAAW,eAAe;IAC9B,oBAAoB,CAAC,EAAE,MAAM,EAAE,CAAC;IAChC,uBAAuB,CAAC,EAAE,MAAM,EAAE,CAAC;IACnC,kBAAkB,CAAC,EAAE,MAAM,EAAE,CAAC;IAC9B,YAAY,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,iBAAiB,GAAG,SAAS,CAAC;CACnE;AAqKD;;GAEG;AACH,wBAAgB,cAAc,CAAC,GAAG,EAAE,OAAO,EAAE,OAAO,CAAC,EAAE,eAAe,GAAG,sBAAsB,CAqB9F;AAED,wBAAgB,uBAAuB,CAAC,GAAG,EAAE,OAAO,GAAG,aAAa,CAgBnE;AAgBD;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,cAAc,EAAE,OAAO,GAAG,SAAS,CAQpE;AAgBD;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,UAAU,EAAE,OAAO,GAAG,UAAU,CAQlE;AAqBD;;;;;GAKG;AACH,wBAAgB,2BAA2B,CAAC,WAAW,EAAE,OAAO,GAAG,mBAAmB,CAarF"}
1
+ {"version":3,"file":"validate.d.ts","sourceRoot":"","sources":["../../src/validate.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAmB,WAAW,EAAC,MAAM,KAAK,CAAC;AACvD,OAAO,KAAK,EAAC,UAAU,EAAE,SAAS,EAAC,MAAM,gBAAgB,CAAC;AAC1D,OAAO,KAAK,EAAmB,mBAAmB,EAAC,MAAM,eAAe,CAAC;AACzE,OAAO,KAAK,EAEV,gBAAgB,EAChB,aAAa,EASb,iBAAiB,EAUlB,MAAM,kBAAkB,CAAC;AAI1B,OAAO,EAAwB,yBAAyB,EAAC,MAAM,mBAAmB,CAAC;AA0pBnF,oBAAY,sBAAsB,GAC9B;IAAC,KAAK,EAAE,IAAI,CAAC;IAAC,MAAM,EAAE,gBAAgB,CAAC;IAAC,MAAM,EAAE,SAAS,CAAA;CAAC,GAC1D;IAAC,KAAK,EAAE,KAAK,CAAC;IAAC,MAAM,EAAE,SAAS,CAAC;IAAC,MAAM,EAAE,yBAAyB,EAAE,CAAA;CAAC,CAAC;AAE3E,wBAAgB,WAAW,CAAC,KAAK,EAAE,WAAW,GAAG,yBAAyB,CAuBzE;AAED,MAAM,WAAW,UAAU;IACzB,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,CAAC,aAAa,CAAC,EAAE,MAAM,KAAK,OAAO,CAAC;IAC/C,QAAQ,EAAE,CAAC,MAAM,EAAE,OAAO,EAAE,OAAO,CAAC,EAAE,eAAe,KAAK,sBAAsB,CAAC;CAClF;AACD,MAAM,WAAW,eAAe;IAC9B,oBAAoB,CAAC,EAAE,MAAM,EAAE,CAAC;IAChC,uBAAuB,CAAC,EAAE,MAAM,EAAE,CAAC;IACnC,kBAAkB,CAAC,EAAE,MAAM,EAAE,CAAC;IAC9B,YAAY,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,iBAAiB,GAAG,SAAS,CAAC;CACnE;AAuKD;;GAEG;AACH,wBAAgB,cAAc,CAAC,GAAG,EAAE,OAAO,EAAE,OAAO,CAAC,EAAE,eAAe,GAAG,sBAAsB,CAqB9F;AAED,wBAAgB,uBAAuB,CAAC,GAAG,EAAE,OAAO,GAAG,aAAa,CAgBnE;AAgBD;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,cAAc,EAAE,OAAO,GAAG,SAAS,CAQpE;AAgBD;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,UAAU,EAAE,OAAO,GAAG,UAAU,CAQlE;AAqBD;;;;;GAKG;AACH,wBAAgB,2BAA2B,CAAC,WAAW,EAAE,OAAO,GAAG,mBAAmB,CAarF"}
package/dist/validate.js CHANGED
@@ -70,6 +70,14 @@ var _relationships = require("./relationships");
70
70
 
71
71
  var _get = _interopRequireDefault(require("lodash/get"));
72
72
 
73
+ var _gte = _interopRequireDefault(require("semver/functions/gte"));
74
+
75
+ var _size = _interopRequireDefault(require("lodash/size"));
76
+
77
+ var _isEqual = _interopRequireDefault(require("lodash/isEqual"));
78
+
79
+ var _pick = _interopRequireDefault(require("lodash/pick"));
80
+
73
81
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
74
82
 
75
83
  function findDuplicates(items) {
@@ -201,6 +209,10 @@ function validateWorkflowsV3(projectSchema) {
201
209
  return errors;
202
210
  }
203
211
 
212
+ function getSemver(schemaVersion) {
213
+ return (0, _coerce2.default)(schemaVersion) ?? _versions.LEGACY_SCHEMA_VERSION;
214
+ }
215
+
204
216
  function validateResolver(projectSchema, basePath, resolver) {
205
217
  const errors = [];
206
218
  /**
@@ -228,7 +240,7 @@ function validateResolver(projectSchema, basePath, resolver) {
228
240
  return Boolean((modelShape === null || modelShape === void 0 ? void 0 : modelShape.model) || shapeName && ((_indexedShapes = projectSchema.indexedShapes) === null || _indexedShapes === void 0 ? void 0 : _indexedShapes[shapeName]));
229
241
  };
230
242
 
231
- const isLessThanV3_9_0 = (0, _lt.default)((0, _coerce2.default)(projectSchema.schemaVersion) ?? _versions.LEGACY_SCHEMA_VERSION, '3.9.0');
243
+ const isLessThanV3_9_0 = (0, _lt.default)(getSemver(projectSchema.schemaVersion), '3.9.0');
232
244
 
233
245
  const validateBasicResolver = resolver => {
234
246
  if ((0, _utils.isBasicResolver)(resolver)) {
@@ -364,7 +376,7 @@ function validateIndexedShapeConfig(projectSchema, shapeName, config) {
364
376
  function validateIndexedShapes(projectSchema) {
365
377
  let errors = [];
366
378
 
367
- if ((0, _gt.default)((0, _coerce2.default)(projectSchema.schemaVersion) ?? _versions.LEGACY_SCHEMA_VERSION, '3.12.0')) {
379
+ if ((0, _gt.default)(getSemver(projectSchema.schemaVersion), '3.12.0')) {
368
380
  const {
369
381
  indexedShapes
370
382
  } = projectSchema;
@@ -449,7 +461,7 @@ function visitShapePropertiesJson(projectSchema, callback) {
449
461
  function validateDirectives(projectSchema, additionalShapeIds = builtInModelShapeIds) {
450
462
  const errors = [];
451
463
  const projectShapeIds = new Set([...getModelShapeIds(projectSchema.shapes), ...additionalShapeIds]);
452
- const isLessThanV3_18_0 = (0, _lt.default)((0, _coerce2.default)(projectSchema.schemaVersion) ?? _versions.LEGACY_SCHEMA_VERSION, '3.18.0');
464
+ const isLessThanV3_18_0 = (0, _lt.default)(getSemver(projectSchema.schemaVersion), '3.18.0');
453
465
  visitShapePropertiesJson(projectSchema, (property, propertyPath) => {
454
466
  if (isLessThanV3_18_0) {
455
467
  const propSchema = property;
@@ -530,6 +542,151 @@ function validateLocales(projectSchema) {
530
542
  return errors;
531
543
  }
532
544
 
545
+ const importantFields = ['type', '@ref', 'allOf', 'oneOf', 'anyOf', 'extends', 'items', '@tag'];
546
+
547
+ function isSchemaEqual(a, b) {
548
+ return (0, _isEqual.default)((0, _pick.default)(a, importantFields), (0, _pick.default)(b, importantFields));
549
+ }
550
+
551
+ function matchesInterface(shape, interfaceShape, path) {
552
+ const errors = [];
553
+ const {
554
+ schema
555
+ } = shape;
556
+ const interfaceSchema = interfaceShape.schema;
557
+
558
+ for (const name of Object.keys(interfaceSchema.properties)) {
559
+ const propSchema = schema.properties[name];
560
+ const interfacePropSchema = interfaceSchema.properties[name];
561
+
562
+ if (!propSchema) {
563
+ errors.push({
564
+ type: 'notFound',
565
+ path,
566
+ message: `"${shape.name}" is missing property "${name}" required by interface "${interfaceShape.name}"`
567
+ });
568
+ } else if (!isSchemaEqual(propSchema, interfacePropSchema)) {
569
+ errors.push({
570
+ type: 'conflict',
571
+ path: [...path, name],
572
+ message: `"${shape.name}.${name}" must match "${interfaceShape.name}.${name}"`
573
+ });
574
+ } else {
575
+ var _schema$required, _interfaceSchema$requ;
576
+
577
+ const propRequired = Boolean((_schema$required = schema.required) === null || _schema$required === void 0 ? void 0 : _schema$required.includes(name));
578
+ const interfacePropRequired = Boolean((_interfaceSchema$requ = interfaceSchema.required) === null || _interfaceSchema$requ === void 0 ? void 0 : _interfaceSchema$requ.includes(name));
579
+
580
+ if (interfacePropRequired !== propRequired) {
581
+ errors.push({
582
+ type: 'conflict',
583
+ path: [...path, name],
584
+ message: `"${shape.name}.${name}" must ${interfacePropRequired ? '' : 'not '}be required to match "${interfaceShape.name}.${name}"`
585
+ });
586
+ }
587
+ }
588
+ }
589
+
590
+ return errors;
591
+ }
592
+
593
+ function validateShapeImplementsInterface(projectSchema, shape, interfaceShapeName, path) {
594
+ const errors = [];
595
+ const interfaceShape = projectSchema.shapes[interfaceShapeName];
596
+
597
+ if (!interfaceShape) {
598
+ errors.push({
599
+ type: 'notFound',
600
+ path,
601
+ message: `Invalid interface "${interfaceShapeName}" not found`
602
+ });
603
+ } else if (interfaceShape.type !== 'interface') {
604
+ errors.push({
605
+ type: 'conflict',
606
+ path,
607
+ message: `"${shape.name}" cannot implement non-interface "${interfaceShape.name}"`
608
+ });
609
+ } else if ((0, _utils.isExtendsSchema)(shape.schema)) {// TODO stricter extends validation needs https://app.shortcut.com/takeshape/story/9783/use-service-schemas-during-schema-validation
610
+ } else if ((0, _utils.isObjectSchema)(shape.schema) && (0, _utils.isObjectSchema)(interfaceShape.schema)) {
611
+ const matchErrors = matchesInterface(shape, interfaceShape, ['shapes', shape.name, 'schema', 'properties']);
612
+
613
+ if (matchErrors.length) {
614
+ errors.push(...matchErrors);
615
+ }
616
+ }
617
+
618
+ return errors;
619
+ }
620
+
621
+ function validateInterfaceImplementations(projectSchema) {
622
+ if (!(0, _gte.default)(getSemver(projectSchema.schemaVersion), '3.21.0')) {
623
+ return [];
624
+ }
625
+
626
+ const errors = [];
627
+
628
+ for (const shape of Object.values(projectSchema.shapes)) {
629
+ var _shape$interfaces;
630
+
631
+ if ((_shape$interfaces = shape.interfaces) !== null && _shape$interfaces !== void 0 && _shape$interfaces.length) {
632
+ if (!(0, _utils.isObjectSchema)(shape.schema) && !(0, _utils.isExtendsSchema)(shape.schema)) {
633
+ return [{
634
+ path: ['shapes', shape.name, 'schema'],
635
+ type: 'conflict',
636
+ message: `"${shape.name}" must have an object or extends schema to implement interfaces`
637
+ }];
638
+ }
639
+
640
+ for (let i = 0; i < shape.interfaces.length; i++) {
641
+ const path = ['shapes', shape.name, 'interfaces', i];
642
+ const interfaceErrors = validateShapeImplementsInterface(projectSchema, shape, shape.interfaces[i], path);
643
+
644
+ if (interfaceErrors.length) {
645
+ errors.push(...interfaceErrors);
646
+ }
647
+ }
648
+ }
649
+ }
650
+
651
+ return errors;
652
+ }
653
+
654
+ function validateInterfaces(projectSchema) {
655
+ if (!(0, _gte.default)(getSemver(projectSchema.schemaVersion), '3.21.0')) {
656
+ return [];
657
+ }
658
+
659
+ const errors = []; // Validate interface shapes must be an object schema with at least one property
660
+
661
+ for (const shape of Object.values(projectSchema.shapes)) {
662
+ if (shape.type === 'interface') {
663
+ if (shape.model) {
664
+ errors.push({
665
+ path: ['shapes', shape.name, 'model'],
666
+ type: 'conflict',
667
+ message: `"${shape.name}" may not be both an interface and model. Create a separate model shape which implements this interface.`
668
+ });
669
+ } else if ((0, _utils.isObjectSchema)(shape.schema)) {
670
+ if ((0, _size.default)(shape.schema.properties) === 0) {
671
+ errors.push({
672
+ path: ['shapes', shape.name, 'schema', 'properties'],
673
+ type: 'conflict',
674
+ message: `Interface "${shape.name}" must define at least one property`
675
+ });
676
+ }
677
+ } else {
678
+ errors.push({
679
+ path: ['shapes', shape.name, 'schema'],
680
+ type: 'conflict',
681
+ message: `Interface "${shape.name}" must define an object schema`
682
+ });
683
+ }
684
+ }
685
+ }
686
+
687
+ return errors;
688
+ }
689
+
533
690
  function formatError(error) {
534
691
  let pathStr = error.instancePath;
535
692
  let message = error.message ?? '';
@@ -607,7 +764,7 @@ function validateV3X(version, obj, options) {
607
764
  const namespaceShapes = (0, _schemaUtil.getAllNamespaceShapes)(schema);
608
765
  const additionalShapeNames = (options !== null && options !== void 0 && options.additionalShapeNames ? builtInShapeNames.concat(options.additionalShapeNames) : builtInShapeNames).concat(namespaceShapes);
609
766
  const additionalModelShapeIds = options !== null && options !== void 0 && options.additionalModelShapeIds ? builtInModelShapeIds.concat(options.additionalModelShapeIds) : builtInModelShapeIds;
610
- errors = errors.concat(checkShapeNames(schema.shapes)).concat(checkShapeIds(schema.shapes)).concat(validateWorkflowsV3(schema)).concat(validateQueryConfigs(schema, additionalShapeNames)).concat(validateRefs(schema, additionalShapeNames)).concat(validateDirectives(schema, additionalModelShapeIds)).concat(validateLocales(schema)).concat(checkWorkflowStepNames(schema.workflows)).concat(checkWorkflowStepKeys(schema.workflows)).concat(validateOneOfs(schema)).concat(validateIndexedShapes(schema));
767
+ errors = errors.concat(checkShapeNames(schema.shapes)).concat(checkShapeIds(schema.shapes)).concat(validateWorkflowsV3(schema)).concat(validateQueryConfigs(schema, additionalShapeNames)).concat(validateRefs(schema, additionalShapeNames)).concat(validateDirectives(schema, additionalModelShapeIds)).concat(validateLocales(schema)).concat(checkWorkflowStepNames(schema.workflows)).concat(checkWorkflowStepKeys(schema.workflows)).concat(validateOneOfs(schema)).concat(validateIndexedShapes(schema)).concat(validateInterfaces(schema)).concat(validateInterfaceImplementations(schema));
611
768
  const suppressErrorPaths = options === null || options === void 0 ? void 0 : options.suppressErrorPaths;
612
769
 
613
770
  if (suppressErrorPaths) {
@@ -1,5 +1,6 @@
1
1
  import defaults from 'lodash/fp/defaults';
2
2
  import { isRecord } from '@takeshape/util';
3
+ import omitBy from 'lodash/omitBy';
3
4
  const inputSchemaCache = new Map();
4
5
 
5
6
  function getInputSchemaCache(options) {
@@ -42,6 +43,12 @@ export function createInputSchema(schema, options = {}) {
42
43
  delete value.default;
43
44
  }
44
45
 
46
+ if (value.type === 'object' && isRecord(value.properties)) {
47
+ return { ...value,
48
+ properties: omitBy(value.properties, prop => isRecord(prop) && prop['@resolver'] && !prop['@input'])
49
+ };
50
+ }
51
+
45
52
  if (isRecord(value['@input'])) {
46
53
  const {
47
54
  '@input': input,
package/es/index.js CHANGED
@@ -27,4 +27,5 @@ export * from './types/utils';
27
27
  export * from './flatten-templates';
28
28
  export * from './relationships';
29
29
  export * from './create-input-schema';
30
- export * from './schema-transform';
30
+ export * from './schema-transform';
31
+ export * from './interfaces';
@@ -0,0 +1,55 @@
1
+ import { getRef, refItemToShape } from './refs';
2
+ import mapValues from 'lodash/mapValues';
3
+ export function isInterfaceShape(shape) {
4
+ return (shape === null || shape === void 0 ? void 0 : shape.type) === 'interface';
5
+ }
6
+ export function isInterfaceRef(context, propertySchema) {
7
+ const ref = getRef(context, propertySchema);
8
+ return Boolean(ref && isInterfaceShape(refItemToShape(context, ref)));
9
+ }
10
+
11
+ function add(record, key, value) {
12
+ if (!record[key]) {
13
+ record[key] = new Set([value]);
14
+ } else {
15
+ record[key].add(value);
16
+ }
17
+ }
18
+
19
+ function getImplementationsHelper(shapeMap, mapFn) {
20
+ const result = {};
21
+
22
+ for (const shape of Object.values(shapeMap)) {
23
+ for (const interfaceName of shape.interfaces ?? []) {
24
+ add(result, interfaceName, mapFn(shape));
25
+ }
26
+ }
27
+
28
+ return result;
29
+ }
30
+
31
+ export function getImplementationShapeMap(shapeMap) {
32
+ return getImplementationsHelper(shapeMap, x => x);
33
+ }
34
+ export function getImplementationShapeNameMap(shapeMap) {
35
+ return getImplementationsHelper(shapeMap, shape => shape.name);
36
+ }
37
+ export function pruneUnusedInterfaces(shapeMap) {
38
+ return mapValues(shapeMap, shape => {
39
+ const {
40
+ interfaces
41
+ } = shape;
42
+
43
+ if (interfaces !== null && interfaces !== void 0 && interfaces.length) {
44
+ const filteredInterfaces = interfaces.filter(name => shapeMap[name]);
45
+
46
+ if (interfaces.length !== filteredInterfaces.length) {
47
+ return { ...shape,
48
+ interfaces: filteredInterfaces
49
+ };
50
+ }
51
+ }
52
+
53
+ return shape;
54
+ });
55
+ }
@@ -25,6 +25,8 @@ import migrateToV3_18_0 from './to/v3.18.0';
25
25
  import migrateToV3_18_1 from './to/v3.18.1';
26
26
  import migrateToV3_18_2 from './to/v3.18.2';
27
27
  import migrateToV3_19_0 from './to/v3.19.0';
28
+ import migrateToV3_20_0 from './to/v3.20.0';
29
+ import migrateToV3_21_0 from './to/v3.21.0';
28
30
  export const migrateTo = {
29
31
  'v3.0.0': migrateToV3_0_0,
30
32
  'v3.1.0': migrateToV3_1_0,
@@ -52,7 +54,9 @@ export const migrateTo = {
52
54
  'v3.18.0': migrateToV3_18_0,
53
55
  'v3.18.1': migrateToV3_18_1,
54
56
  'v3.18.2': migrateToV3_18_2,
55
- 'v3.19.0': migrateToV3_19_0
57
+ 'v3.19.0': migrateToV3_19_0,
58
+ 'v3.20.0': migrateToV3_20_0,
59
+ 'v3.21.0': migrateToV3_21_0
56
60
  };
57
61
  export * from './utils';
58
62
  export const listTypePrefix = 'PaginatedList';
@@ -0,0 +1,24 @@
1
+ import mapValues from 'lodash/mapValues';
2
+
3
+ function updateGenericServices(projectSchema) {
4
+ if (projectSchema.services) {
5
+ return { ...projectSchema,
6
+ services: mapValues(projectSchema.services, serviceConfig => // generic provider has been renamed to match service type
7
+ serviceConfig.provider === 'shopify' ? { ...serviceConfig,
8
+ options: { ...serviceConfig.options,
9
+ legacyApp: true
10
+ }
11
+ } : serviceConfig)
12
+ };
13
+ }
14
+
15
+ return projectSchema;
16
+ }
17
+
18
+ const migrate = async (_, projectSchema) => {
19
+ return { ...updateGenericServices(projectSchema),
20
+ schemaVersion: '3.20.0'
21
+ };
22
+ };
23
+
24
+ export default migrate;
@@ -0,0 +1,10 @@
1
+ const migrate = async (_, projectSchema) => {
2
+ /**
3
+ * No migration needed all changes are backwards compatible.
4
+ */
5
+ return { ...projectSchema,
6
+ schemaVersion: '3.21.0'
7
+ };
8
+ };
9
+
10
+ export default migrate;
@@ -28,6 +28,8 @@ export * from './v3.18.0';
28
28
  export * from './v3.18.1';
29
29
  export * from './v3.18.2';
30
30
  export * from './v3.19.0';
31
+ export * from './v3.20.0';
32
+ export * from './v3.21.0';
31
33
  export * from './v4.0.0';
32
34
 
33
35
  // Schema type utilities
@@ -77,5 +79,7 @@ export const isProjectSchemaV3_18_0 = createVersionPredicate('3.18.0');
77
79
  export const isProjectSchemaV3_18_1 = createVersionPredicate('3.18.1');
78
80
  export const isProjectSchemaV3_18_2 = createVersionPredicate('3.18.2');
79
81
  export const isProjectSchemaV3_19_0 = createVersionPredicate('3.19.0');
80
- export const isLatestProjectSchema = createVersionPredicate('3.19.0');
82
+ export const isProjectSchemaV3_20_0 = createVersionPredicate('3.20.0');
83
+ export const isProjectSchemaV3_21_0 = createVersionPredicate('3.21.0');
84
+ export const isLatestProjectSchema = createVersionPredicate('3.21.0');
81
85
  export const isProjectSchemaV4_0_0 = createVersionPredicate('4.0.0');
@@ -1,6 +1,6 @@
1
1
  // This file is generated by "pnpm json2ts"
2
2
  import { migrateTo } from '../migration';
3
- import { isProjectSchemaV1_0_0, isProjectSchemaV3_0_0, isProjectSchemaV3_1_0, isProjectSchemaV3_2_0, isProjectSchemaV3_3_0, isProjectSchemaV3_4_0, isProjectSchemaV3_5_0, isProjectSchemaV3_5_1, isProjectSchemaV3_6_0, isProjectSchemaV3_7_0, isProjectSchemaV3_8_0, isProjectSchemaV3_9_0, isProjectSchemaV3_10_0, isProjectSchemaV3_11_0, isProjectSchemaV3_12_0, isProjectSchemaV3_12_1, isProjectSchemaV3_12_2, isProjectSchemaV3_12_3, isProjectSchemaV3_13_0, isProjectSchemaV3_14_0, isProjectSchemaV3_15_0, isProjectSchemaV3_16_0, isProjectSchemaV3_17_0, isProjectSchemaV3_17_1, isProjectSchemaV3_18_0, isProjectSchemaV3_18_1, isProjectSchemaV3_18_2, isProjectSchemaV4_0_0, isLatestProjectSchema } from './index'; // eslint-disable-next-line complexity
3
+ import { isProjectSchemaV1_0_0, isProjectSchemaV3_0_0, isProjectSchemaV3_1_0, isProjectSchemaV3_2_0, isProjectSchemaV3_3_0, isProjectSchemaV3_4_0, isProjectSchemaV3_5_0, isProjectSchemaV3_5_1, isProjectSchemaV3_6_0, isProjectSchemaV3_7_0, isProjectSchemaV3_8_0, isProjectSchemaV3_9_0, isProjectSchemaV3_10_0, isProjectSchemaV3_11_0, isProjectSchemaV3_12_0, isProjectSchemaV3_12_1, isProjectSchemaV3_12_2, isProjectSchemaV3_12_3, isProjectSchemaV3_13_0, isProjectSchemaV3_14_0, isProjectSchemaV3_15_0, isProjectSchemaV3_16_0, isProjectSchemaV3_17_0, isProjectSchemaV3_17_1, isProjectSchemaV3_18_0, isProjectSchemaV3_18_1, isProjectSchemaV3_18_2, isProjectSchemaV3_19_0, isProjectSchemaV3_20_0, isProjectSchemaV4_0_0, isLatestProjectSchema } from './index'; // eslint-disable-next-line complexity
4
4
 
5
5
  export async function migrateToLatestProjectSchema(context, projectSchema) {
6
6
  if (isLatestProjectSchema(projectSchema)) {
@@ -115,6 +115,14 @@ export async function migrateToLatestProjectSchema(context, projectSchema) {
115
115
  projectSchema = await migrateTo['v3.19.0'](context, projectSchema);
116
116
  }
117
117
 
118
+ if (isProjectSchemaV3_19_0(projectSchema)) {
119
+ projectSchema = await migrateTo['v3.20.0'](context, projectSchema);
120
+ }
121
+
122
+ if (isProjectSchemaV3_20_0(projectSchema)) {
123
+ projectSchema = await migrateTo['v3.21.0'](context, projectSchema);
124
+ }
125
+
118
126
  if (isProjectSchemaV4_0_0(projectSchema)) {
119
127
  throw new Error('You are using an unreleased schema version. Migration is not possible');
120
128
  }
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1 @@
1
+ export {};
package/es/refs.js CHANGED
@@ -356,8 +356,8 @@ export const omitRefAndExtend = (targetSchema, sourceSchema) => assign(omit(['@r
356
356
  * in place of the reference.
357
357
  */
358
358
 
359
- export function followRef(context, schema) {
360
- const refItem = getRef(context, schema);
359
+ export function followRef(context, schema, ref) {
360
+ const refItem = ref ?? getRef(context, schema);
361
361
 
362
362
  if (refItem) {
363
363
  const referencedSchema = refItemToShapeSchema(context, refItem);
package/es/schema-util.js CHANGED
@@ -910,7 +910,11 @@ export function filterGraphQLServiceMap(serviceMap) {
910
910
  * Add all referenced shape names to the refSet meant to be used as a callback to visitSchemaProperties
911
911
  */
912
912
 
913
- export function collectReferencedShapeNames(projectSchema, refSet) {
913
+ export function collectReferencedShapeNames(context, shapeNames) {
914
+ const addRef = refItem => {
915
+ shapeNames.add(refItemToShapeName(refItem));
916
+ };
917
+
914
918
  const collect = schema => {
915
919
  const args = schema['@args'];
916
920
 
@@ -918,16 +922,16 @@ export function collectReferencedShapeNames(projectSchema, refSet) {
918
922
  Object.values(args.properties).forEach(collect);
919
923
  }
920
924
 
921
- const argsRefItem = getArgsReference(projectSchema, schema);
925
+ const argsRefItem = getArgsReference(context, schema);
922
926
 
923
927
  if (argsRefItem) {
924
- refSet.add(refItemToShapeName(argsRefItem));
928
+ addRef(argsRefItem);
925
929
  }
926
930
 
927
- const refItem = getRefOrItemsRef(projectSchema, schema);
931
+ const refItem = getRefOrItemsRef(context, schema);
928
932
 
929
933
  if (refItem) {
930
- refSet.add(refItemToShapeName(refItem));
934
+ addRef(refItem);
931
935
  }
932
936
  };
933
937
 
@@ -1,7 +1,7 @@
1
1
  // This file is generated by "pnpm json2ts"
2
- export const CURRENT_SCHEMA_VERSION = '3.19.0';
2
+ export const CURRENT_SCHEMA_VERSION = '3.21.0';
3
3
  export { default as anyProjectSchema } from './project-schema.json';
4
- export { default as latestSchemaJson } from './project-schema/v3.19.0.json';
4
+ export { default as latestSchemaJson } from './project-schema/v3.21.0.json';
5
5
  import metaSchemaV1_0_0 from './project-schema/meta-schema-v1.0.0.json';
6
6
  import projectSchemaV1_0_0 from './project-schema/v1.0.0.json';
7
7
  import metaSchemaV3_0_0 from './project-schema/meta-schema-v3.0.0.json';
@@ -42,5 +42,7 @@ import projectSchemaV3_18_0 from './project-schema/v3.18.0.json';
42
42
  import projectSchemaV3_18_1 from './project-schema/v3.18.1.json';
43
43
  import projectSchemaV3_18_2 from './project-schema/v3.18.2.json';
44
44
  import projectSchemaV3_19_0 from './project-schema/v3.19.0.json';
45
+ import projectSchemaV3_20_0 from './project-schema/v3.20.0.json';
46
+ import projectSchemaV3_21_0 from './project-schema/v3.21.0.json';
45
47
  import projectSchemaV4_0_0 from './project-schema/v4.0.0.json';
46
- export const allProjectSchemas = [metaSchemaV1_0_0, projectSchemaV1_0_0, metaSchemaV3_0_0, projectSchemaV3_0_0, metaSchemaV3_1_0, projectSchemaV3_1_0, metaSchemaV3_2_0, projectSchemaV3_2_0, metaSchemaV3_3_0, projectSchemaV3_3_0, metaSchemaV3_4_0, projectSchemaV3_4_0, metaSchemaV3_5_0, projectSchemaV3_5_0, metaSchemaV3_5_1, projectSchemaV3_5_1, metaSchemaV3_6_0, projectSchemaV3_6_0, metaSchemaV3_7_0, projectSchemaV3_7_0, metaSchemaV3_8_0, projectSchemaV3_8_0, metaSchemaV3_9_0, projectSchemaV3_9_0, projectSchemaV3_10_0, projectSchemaV3_11_0, projectSchemaV3_12_0, projectSchemaV3_12_1, projectSchemaV3_12_2, projectSchemaV3_12_3, projectSchemaV3_13_0, projectSchemaV3_14_0, projectSchemaV3_15_0, projectSchemaV3_16_0, projectSchemaV3_17_0, projectSchemaV3_17_1, projectSchemaV3_18_0, projectSchemaV3_18_1, projectSchemaV3_18_2, projectSchemaV3_19_0, projectSchemaV4_0_0];
48
+ export const allProjectSchemas = [metaSchemaV1_0_0, projectSchemaV1_0_0, metaSchemaV3_0_0, projectSchemaV3_0_0, metaSchemaV3_1_0, projectSchemaV3_1_0, metaSchemaV3_2_0, projectSchemaV3_2_0, metaSchemaV3_3_0, projectSchemaV3_3_0, metaSchemaV3_4_0, projectSchemaV3_4_0, metaSchemaV3_5_0, projectSchemaV3_5_0, metaSchemaV3_5_1, projectSchemaV3_5_1, metaSchemaV3_6_0, projectSchemaV3_6_0, metaSchemaV3_7_0, projectSchemaV3_7_0, metaSchemaV3_8_0, projectSchemaV3_8_0, metaSchemaV3_9_0, projectSchemaV3_9_0, projectSchemaV3_10_0, projectSchemaV3_11_0, projectSchemaV3_12_0, projectSchemaV3_12_1, projectSchemaV3_12_2, projectSchemaV3_12_3, projectSchemaV3_13_0, projectSchemaV3_14_0, projectSchemaV3_15_0, projectSchemaV3_16_0, projectSchemaV3_17_0, projectSchemaV3_17_1, projectSchemaV3_18_0, projectSchemaV3_18_1, projectSchemaV3_18_2, projectSchemaV3_19_0, projectSchemaV3_20_0, projectSchemaV3_21_0, projectSchemaV4_0_0];
@@ -1,7 +1,7 @@
1
1
  // This file is generated by "pnpm json2ts"
2
- export const CURRENT_SCHEMA_VERSION = '3.19.0';
2
+ export const CURRENT_SCHEMA_VERSION = '3.21.0';
3
3
  export {default as anyProjectSchema} from './project-schema.json';
4
- export {default as latestSchemaJson} from './project-schema/v3.19.0.json';
4
+ export {default as latestSchemaJson} from './project-schema/v3.21.0.json';
5
5
  import metaSchemaV1_0_0 from './project-schema/meta-schema-v1.0.0.json';
6
6
  import projectSchemaV1_0_0 from './project-schema/v1.0.0.json';
7
7
  import metaSchemaV3_0_0 from './project-schema/meta-schema-v3.0.0.json';
@@ -42,6 +42,8 @@ import projectSchemaV3_18_0 from './project-schema/v3.18.0.json';
42
42
  import projectSchemaV3_18_1 from './project-schema/v3.18.1.json';
43
43
  import projectSchemaV3_18_2 from './project-schema/v3.18.2.json';
44
44
  import projectSchemaV3_19_0 from './project-schema/v3.19.0.json';
45
+ import projectSchemaV3_20_0 from './project-schema/v3.20.0.json';
46
+ import projectSchemaV3_21_0 from './project-schema/v3.21.0.json';
45
47
  import projectSchemaV4_0_0 from './project-schema/v4.0.0.json';
46
48
  export const allProjectSchemas = [
47
49
  metaSchemaV1_0_0,
@@ -84,5 +86,7 @@ export const allProjectSchemas = [
84
86
  projectSchemaV3_18_1,
85
87
  projectSchemaV3_18_2,
86
88
  projectSchemaV3_19_0,
89
+ projectSchemaV3_20_0,
90
+ projectSchemaV3_21_0,
87
91
  projectSchemaV4_0_0
88
92
  ];
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "$schema": "http://json-schema.org/draft-07/schema#",
3
- "$id": "https://schema.takeshape.io/project-schema/v3.19.0#",
3
+ "$id": "https://schema.takeshape.io/project-schema/v3.21.0#",
4
4
  "title": "Project Schema",
5
5
  "definitions": {
6
6
  "schemaArray": {
@@ -1513,6 +1513,13 @@
1513
1513
  "description": {
1514
1514
  "type": "string"
1515
1515
  },
1516
+ "type": {
1517
+ "enum": ["interface", "input", "output"]
1518
+ },
1519
+ "interfaces": {
1520
+ "type": "array",
1521
+ "items": {"type": "string"}
1522
+ },
1516
1523
  "model": {
1517
1524
  "description": "Specifying a model type allows Shape data to be stored in TakeShape's built-in database",
1518
1525
  "type": "object",
@@ -2273,7 +2280,7 @@
2273
2280
  },
2274
2281
  "schemaVersion": {
2275
2282
  "type": "string",
2276
- "enum": ["3.19.0"],
2283
+ "enum": ["3.21.0"],
2277
2284
  "description": "The version of the schema format your project is using. We increase the version as we make breaking changes to the schema format."
2278
2285
  },
2279
2286
  "projectId": {