@strapi/typescript-utils 0.0.0-experimental.6340da17068c3bed7fb006e7bcc554c71129e282 → 0.0.0-experimental.63624e21eb5b0713345a0cf2f68f1c40eab427bc

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 (225) hide show
  1. package/dist/compile.d.ts +5 -0
  2. package/dist/compile.d.ts.map +1 -0
  3. package/dist/compile.js +12 -0
  4. package/dist/compile.js.map +1 -0
  5. package/dist/compile.mjs +10 -0
  6. package/dist/compile.mjs.map +1 -0
  7. package/dist/compilers/basic.d.ts +11 -0
  8. package/dist/compilers/basic.d.ts.map +1 -0
  9. package/dist/compilers/basic.js +58 -0
  10. package/dist/compilers/basic.js.map +1 -0
  11. package/dist/compilers/basic.mjs +36 -0
  12. package/dist/compilers/basic.mjs.map +1 -0
  13. package/dist/compilers/index.d.ts +3 -0
  14. package/dist/compilers/index.d.ts.map +1 -0
  15. package/dist/compilers/index.js +8 -0
  16. package/dist/compilers/index.js.map +1 -0
  17. package/dist/compilers/index.mjs +3 -0
  18. package/dist/compilers/index.mjs.map +1 -0
  19. package/dist/generators/common/compare.d.ts +14 -0
  20. package/dist/generators/common/compare.d.ts.map +1 -0
  21. package/dist/generators/common/compare.js +25 -0
  22. package/dist/generators/common/compare.js.map +1 -0
  23. package/dist/generators/common/compare.mjs +22 -0
  24. package/dist/generators/common/compare.mjs.map +1 -0
  25. package/dist/generators/common/imports.d.ts +5 -0
  26. package/dist/generators/common/imports.d.ts.map +1 -0
  27. package/dist/generators/common/imports.js +42 -0
  28. package/dist/generators/common/imports.js.map +1 -0
  29. package/dist/generators/common/imports.mjs +19 -0
  30. package/dist/generators/common/imports.mjs.map +1 -0
  31. package/dist/generators/common/index.d.ts +4 -0
  32. package/dist/generators/common/index.d.ts.map +1 -0
  33. package/dist/generators/common/interface-names.d.ts +16 -0
  34. package/dist/generators/common/interface-names.d.ts.map +1 -0
  35. package/dist/generators/common/interface-names.js +54 -0
  36. package/dist/generators/common/interface-names.js.map +1 -0
  37. package/dist/generators/common/interface-names.mjs +52 -0
  38. package/dist/generators/common/interface-names.mjs.map +1 -0
  39. package/dist/generators/common/models/attributes.d.ts +38 -0
  40. package/dist/generators/common/models/attributes.d.ts.map +1 -0
  41. package/dist/generators/common/models/attributes.js +205 -0
  42. package/dist/generators/common/models/attributes.js.map +1 -0
  43. package/dist/generators/common/models/attributes.mjs +176 -0
  44. package/dist/generators/common/models/attributes.mjs.map +1 -0
  45. package/dist/generators/common/models/index.d.ts +7 -0
  46. package/dist/generators/common/models/index.d.ts.map +1 -0
  47. package/dist/generators/common/models/mappers.d.ts +9 -0
  48. package/dist/generators/common/models/mappers.d.ts.map +1 -0
  49. package/dist/generators/common/models/mappers.js +227 -0
  50. package/dist/generators/common/models/mappers.js.map +1 -0
  51. package/dist/generators/common/models/mappers.mjs +202 -0
  52. package/dist/generators/common/models/mappers.mjs.map +1 -0
  53. package/dist/generators/common/models/schema.d.ts +8 -0
  54. package/dist/generators/common/models/schema.d.ts.map +1 -0
  55. package/dist/generators/common/models/schema.js +78 -0
  56. package/dist/generators/common/models/schema.js.map +1 -0
  57. package/dist/generators/common/models/schema.mjs +56 -0
  58. package/dist/generators/common/models/schema.mjs.map +1 -0
  59. package/dist/generators/common/models/utils.d.ts +57 -0
  60. package/dist/generators/common/models/utils.d.ts.map +1 -0
  61. package/dist/generators/common/models/utils.js +110 -0
  62. package/dist/generators/common/models/utils.js.map +1 -0
  63. package/dist/generators/common/models/utils.mjs +82 -0
  64. package/dist/generators/common/models/utils.mjs.map +1 -0
  65. package/dist/generators/common/sources.d.ts +133 -0
  66. package/dist/generators/common/sources.d.ts.map +1 -0
  67. package/dist/generators/common/sources.js +354 -0
  68. package/dist/generators/common/sources.js.map +1 -0
  69. package/dist/generators/common/sources.mjs +318 -0
  70. package/dist/generators/common/sources.mjs.map +1 -0
  71. package/dist/generators/components/index.d.ts +9 -0
  72. package/dist/generators/components/index.d.ts.map +1 -0
  73. package/dist/generators/components/index.js +84 -0
  74. package/dist/generators/components/index.js.map +1 -0
  75. package/dist/generators/components/index.mjs +62 -0
  76. package/dist/generators/components/index.mjs.map +1 -0
  77. package/dist/generators/constants.d.ts +3 -0
  78. package/dist/generators/constants.d.ts.map +1 -0
  79. package/dist/generators/constants.js +8 -0
  80. package/dist/generators/constants.js.map +1 -0
  81. package/dist/generators/constants.mjs +5 -0
  82. package/dist/generators/constants.mjs.map +1 -0
  83. package/dist/generators/content-types/index.d.ts +9 -0
  84. package/dist/generators/content-types/index.d.ts.map +1 -0
  85. package/dist/generators/content-types/index.js +84 -0
  86. package/dist/generators/content-types/index.js.map +1 -0
  87. package/dist/generators/content-types/index.mjs +62 -0
  88. package/dist/generators/content-types/index.mjs.map +1 -0
  89. package/dist/generators/controllers/index.d.ts +35 -0
  90. package/dist/generators/controllers/index.d.ts.map +1 -0
  91. package/dist/generators/controllers/index.js +88 -0
  92. package/dist/generators/controllers/index.js.map +1 -0
  93. package/dist/generators/controllers/index.mjs +86 -0
  94. package/dist/generators/controllers/index.mjs.map +1 -0
  95. package/dist/generators/index.d.ts +31 -0
  96. package/dist/generators/index.d.ts.map +1 -0
  97. package/dist/generators/index.js +150 -0
  98. package/dist/generators/index.js.map +1 -0
  99. package/dist/generators/index.mjs +142 -0
  100. package/dist/generators/index.mjs.map +1 -0
  101. package/dist/generators/middlewares/index.d.ts +30 -0
  102. package/dist/generators/middlewares/index.d.ts.map +1 -0
  103. package/dist/generators/middlewares/index.js +163 -0
  104. package/dist/generators/middlewares/index.js.map +1 -0
  105. package/dist/generators/middlewares/index.mjs +141 -0
  106. package/dist/generators/middlewares/index.mjs.map +1 -0
  107. package/dist/generators/plugins/index.d.ts +9 -0
  108. package/dist/generators/plugins/index.d.ts.map +1 -0
  109. package/dist/generators/plugins/index.js +225 -0
  110. package/dist/generators/plugins/index.js.map +1 -0
  111. package/dist/generators/plugins/index.mjs +200 -0
  112. package/dist/generators/plugins/index.mjs.map +1 -0
  113. package/dist/generators/policies/index.d.ts +29 -0
  114. package/dist/generators/policies/index.d.ts.map +1 -0
  115. package/dist/generators/policies/index.js +135 -0
  116. package/dist/generators/policies/index.js.map +1 -0
  117. package/dist/generators/policies/index.mjs +113 -0
  118. package/dist/generators/policies/index.mjs.map +1 -0
  119. package/dist/generators/services/index.d.ts +35 -0
  120. package/dist/generators/services/index.d.ts.map +1 -0
  121. package/dist/generators/services/index.js +87 -0
  122. package/dist/generators/services/index.js.map +1 -0
  123. package/dist/generators/services/index.mjs +85 -0
  124. package/dist/generators/services/index.mjs.map +1 -0
  125. package/dist/generators/strict/index.d.ts +13 -0
  126. package/dist/generators/strict/index.d.ts.map +1 -0
  127. package/dist/generators/strict/index.js +24 -0
  128. package/dist/generators/strict/index.js.map +1 -0
  129. package/dist/generators/strict/index.mjs +22 -0
  130. package/dist/generators/strict/index.mjs.map +1 -0
  131. package/dist/generators/utils.d.ts +68 -0
  132. package/dist/generators/utils.d.ts.map +1 -0
  133. package/dist/generators/utils.js +201 -0
  134. package/dist/generators/utils.js.map +1 -0
  135. package/dist/generators/utils.mjs +166 -0
  136. package/dist/generators/utils.mjs.map +1 -0
  137. package/dist/index.d.ts +5 -0
  138. package/dist/index.d.ts.map +1 -0
  139. package/dist/index.js +28 -0
  140. package/dist/index.js.map +1 -0
  141. package/dist/index.mjs +14 -0
  142. package/dist/index.mjs.map +1 -0
  143. package/dist/utils/format-host.d.ts +3 -0
  144. package/dist/utils/format-host.d.ts.map +1 -0
  145. package/dist/utils/format-host.js +33 -0
  146. package/dist/utils/format-host.js.map +1 -0
  147. package/dist/utils/format-host.mjs +11 -0
  148. package/dist/utils/format-host.mjs.map +1 -0
  149. package/dist/utils/get-config-path.d.ts +10 -0
  150. package/dist/utils/get-config-path.d.ts.map +1 -0
  151. package/dist/utils/get-config-path.js +43 -0
  152. package/dist/utils/get-config-path.js.map +1 -0
  153. package/dist/utils/get-config-path.mjs +18 -0
  154. package/dist/utils/get-config-path.mjs.map +1 -0
  155. package/dist/utils/index.d.ts +9 -0
  156. package/dist/utils/index.d.ts.map +1 -0
  157. package/dist/utils/is-using-typescript-sync.d.ts +5 -0
  158. package/dist/utils/is-using-typescript-sync.d.ts.map +1 -0
  159. package/dist/utils/is-using-typescript-sync.js +20 -0
  160. package/dist/utils/is-using-typescript-sync.js.map +1 -0
  161. package/dist/utils/is-using-typescript-sync.mjs +14 -0
  162. package/dist/utils/is-using-typescript-sync.mjs.map +1 -0
  163. package/dist/utils/is-using-typescript.d.ts +5 -0
  164. package/dist/utils/is-using-typescript.d.ts.map +1 -0
  165. package/dist/utils/is-using-typescript.js +20 -0
  166. package/dist/utils/is-using-typescript.js.map +1 -0
  167. package/dist/utils/is-using-typescript.mjs +14 -0
  168. package/dist/utils/is-using-typescript.mjs.map +1 -0
  169. package/dist/utils/report-diagnostics.d.ts +6 -0
  170. package/dist/utils/report-diagnostics.d.ts.map +1 -0
  171. package/dist/utils/report-diagnostics.js +37 -0
  172. package/dist/utils/report-diagnostics.js.map +1 -0
  173. package/dist/utils/report-diagnostics.mjs +15 -0
  174. package/dist/utils/report-diagnostics.mjs.map +1 -0
  175. package/dist/utils/resolve-config-options.d.ts +12 -0
  176. package/dist/utils/resolve-config-options.d.ts.map +1 -0
  177. package/dist/utils/resolve-config-options.js +39 -0
  178. package/dist/utils/resolve-config-options.js.map +1 -0
  179. package/dist/utils/resolve-config-options.mjs +17 -0
  180. package/dist/utils/resolve-config-options.mjs.map +1 -0
  181. package/dist/utils/resolve-outdir-sync.d.ts +5 -0
  182. package/dist/utils/resolve-outdir-sync.d.ts.map +1 -0
  183. package/dist/utils/resolve-outdir-sync.js +19 -0
  184. package/dist/utils/resolve-outdir-sync.js.map +1 -0
  185. package/dist/utils/resolve-outdir-sync.mjs +13 -0
  186. package/dist/utils/resolve-outdir-sync.mjs.map +1 -0
  187. package/dist/utils/resolve-outdir.d.ts +5 -0
  188. package/dist/utils/resolve-outdir.d.ts.map +1 -0
  189. package/dist/utils/resolve-outdir.js +19 -0
  190. package/dist/utils/resolve-outdir.js.map +1 -0
  191. package/dist/utils/resolve-outdir.mjs +13 -0
  192. package/dist/utils/resolve-outdir.mjs.map +1 -0
  193. package/package.json +27 -12
  194. package/.eslintrc.cjs +0 -16
  195. package/index.d.ts +0 -5
  196. package/jest.config.js +0 -6
  197. package/lib/__tests__/generators/schemas/attributes.test.js +0 -903
  198. package/lib/__tests__/generators/schemas/imports.test.js +0 -56
  199. package/lib/__tests__/generators/schemas/utils.test.js +0 -314
  200. package/lib/compile.js +0 -10
  201. package/lib/compilers/basic.js +0 -50
  202. package/lib/compilers/index.js +0 -7
  203. package/lib/generators/common/imports.js +0 -34
  204. package/lib/generators/common/index.js +0 -9
  205. package/lib/generators/common/models/attributes.js +0 -198
  206. package/lib/generators/common/models/index.js +0 -15
  207. package/lib/generators/common/models/mappers.js +0 -144
  208. package/lib/generators/common/models/schema.js +0 -93
  209. package/lib/generators/common/models/utils.js +0 -178
  210. package/lib/generators/components/index.js +0 -74
  211. package/lib/generators/constants.js +0 -6
  212. package/lib/generators/content-types/index.js +0 -74
  213. package/lib/generators/index.js +0 -122
  214. package/lib/generators/utils.js +0 -216
  215. package/lib/index.js +0 -13
  216. package/lib/utils/format-host.js +0 -15
  217. package/lib/utils/get-config-path.js +0 -29
  218. package/lib/utils/index.js +0 -21
  219. package/lib/utils/is-using-typescript-sync.js +0 -19
  220. package/lib/utils/is-using-typescript.js +0 -17
  221. package/lib/utils/report-diagnostics.js +0 -19
  222. package/lib/utils/resolve-config-options.js +0 -23
  223. package/lib/utils/resolve-outdir-sync.js +0 -18
  224. package/lib/utils/resolve-outdir.js +0 -18
  225. package/lint-staged.config.mjs +0 -1
@@ -0,0 +1,68 @@
1
+ import * as ts from 'typescript';
2
+ /**
3
+ * Aggregate the given TypeScript nodes into a single string
4
+ */
5
+ export declare const emitDefinitions: (definitions: ts.Node[]) => string;
6
+ /**
7
+ * Save the given string representation of TS nodes in a file
8
+ * If the given directory doesn't exist, it'll be created automatically
9
+ *
10
+ * @return The path of the created file
11
+ */
12
+ export declare const saveDefinitionToFileSystem: (dir: string, file: string, content: string) => Promise<string>;
13
+ /**
14
+ * Format the given definitions.
15
+ * Uses the existing config if one is defined in the project.
16
+ */
17
+ export declare const format: (content: string) => Promise<string>;
18
+ /**
19
+ * Generate the extension block for a shared component from strapi/strapi
20
+ *
21
+ * Without strict types, the block augments the `Public` namespace of `@strapi/strapi`, as in
22
+ * previous releases. With strict types, it augments the global `Strapi.Registries` namespace, the
23
+ * only schema registries strict mode reads.
24
+ */
25
+ export declare const generateSharedExtensionDefinition: (registry: string, definitions: Array<{
26
+ uid: string;
27
+ definition: ts.InterfaceDeclaration;
28
+ }>, { strict }?: {
29
+ strict?: boolean;
30
+ }) => ts.ModuleDeclaration;
31
+ interface CreateLoggerOptions {
32
+ silent?: boolean;
33
+ debug?: boolean;
34
+ }
35
+ export declare const createLogger: (options?: CreateLoggerOptions) => {
36
+ readonly warnings: number;
37
+ readonly errors: number;
38
+ debug(...args: any[]): void;
39
+ info(...args: any[]): void;
40
+ warn(...args: any[]): void;
41
+ error(...args: any[]): void;
42
+ };
43
+ export declare const timer: () => {
44
+ start(): /*elided*/ any;
45
+ end(): /*elided*/ any;
46
+ readonly duration: number;
47
+ };
48
+ /**
49
+ * Resolve to `true` when the given path exists, `false` otherwise
50
+ */
51
+ export declare const pathExists: (target: string) => Promise<boolean>;
52
+ export type Logger = ReturnType<typeof createLogger>;
53
+ /**
54
+ * Options passed to each artifact generator.
55
+ */
56
+ export interface GeneratorOptions {
57
+ strapi: any;
58
+ logger: Logger;
59
+ pwd?: string;
60
+ appDir?: string;
61
+ /**
62
+ * Whether the application enables `typescript.strictTypes`. Schema generators then write the
63
+ * global `Strapi.Registries` form instead of the `Public` form.
64
+ */
65
+ strict?: boolean;
66
+ }
67
+ export {};
68
+ //# sourceMappingURL=utils.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../src/generators/utils.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,MAAM,YAAY,CAAC;AAYjC;;GAEG;AACH,eAAO,MAAM,eAAe,GAAI,aAAa,EAAE,CAAC,IAAI,EAAE,KAAG,MAcxD,CAAC;AAEF;;;;;GAKG;AACH,eAAO,MAAM,0BAA0B,GACrC,KAAK,MAAM,EACX,MAAM,MAAM,EACZ,SAAS,MAAM,KACd,OAAO,CAAC,MAAM,CAOhB,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,MAAM,GAAU,SAAS,MAAM,KAAG,OAAO,CAAC,MAAM,CAiB5D,CAAC;AAEF;;;;;;GAMG;AACH,eAAO,MAAM,iCAAiC,GAC5C,UAAU,MAAM,EAChB,aAAa,KAAK,CAAC;IAAE,GAAG,EAAE,MAAM,CAAC;IAAC,UAAU,EAAE,EAAE,CAAC,oBAAoB,CAAA;CAAE,CAAC,EACxE,aAAoB;IAAE,MAAM,CAAC,EAAE,OAAO,CAAA;CAAO,KAC5C,EAAE,CAAC,iBAyCL,CAAC;AA2CF,UAAU,mBAAmB;IAC3B,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAED,eAAO,MAAM,YAAY,GAAI,UAAS,mBAAwB;;;mBAc3C,GAAG,EAAE;kBAQN,GAAG,EAAE;kBAQL,GAAG,EAAE;mBAUJ,GAAG,EAAE;CAUvB,CAAC;AAEF,eAAO,MAAM,KAAK;;;;CA+BjB,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,UAAU,GAAU,QAAQ,MAAM,KAAG,OAAO,CAAC,OAAO,CAOhE,CAAC;AAEF,MAAM,MAAM,MAAM,GAAG,UAAU,CAAC,OAAO,YAAY,CAAC,CAAC;AAErD;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,MAAM,EAAE,GAAG,CAAC;IACZ,MAAM,EAAE,MAAM,CAAC;IACf,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB;;;OAGG;IACH,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB"}
@@ -0,0 +1,201 @@
1
+ 'use strict';
2
+
3
+ var path = require('node:path');
4
+ var assert = require('node:assert');
5
+ var ts = require('typescript');
6
+ var fs = require('node:fs/promises');
7
+ var fse = require('fs-extra');
8
+ var chalk = require('chalk');
9
+
10
+ function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; }
11
+
12
+ function _interopNamespace(e) {
13
+ if (e && e.__esModule) return e;
14
+ var n = Object.create(null);
15
+ if (e) {
16
+ Object.keys(e).forEach(function (k) {
17
+ if (k !== 'default') {
18
+ var d = Object.getOwnPropertyDescriptor(e, k);
19
+ Object.defineProperty(n, k, d.get ? d : {
20
+ enumerable: true,
21
+ get: function () { return e[k]; }
22
+ });
23
+ }
24
+ });
25
+ }
26
+ n.default = e;
27
+ return Object.freeze(n);
28
+ }
29
+
30
+ var path__default = /*#__PURE__*/_interopDefault(path);
31
+ var assert__default = /*#__PURE__*/_interopDefault(assert);
32
+ var ts__namespace = /*#__PURE__*/_interopNamespace(ts);
33
+ var fs__default = /*#__PURE__*/_interopDefault(fs);
34
+ var fse__default = /*#__PURE__*/_interopDefault(fse);
35
+ var chalk__default = /*#__PURE__*/_interopDefault(chalk);
36
+
37
+ const { factory } = ts__namespace;
38
+ const MODULE_DECLARATION = '@strapi/strapi';
39
+ const PUBLIC_NAMESPACE = 'Public';
40
+ const GLOBAL_NAMESPACE = 'Strapi';
41
+ const REGISTRIES_NAMESPACE = 'Registries';
42
+ /**
43
+ * Aggregate the given TypeScript nodes into a single string
44
+ */ const emitDefinitions = (definitions)=>{
45
+ const nodeArray = factory.createNodeArray(definitions);
46
+ const sourceFile = ts__namespace.createSourceFile('placeholder.ts', '', ts__namespace.ScriptTarget.ESNext, true, ts__namespace.ScriptKind.TS);
47
+ const printer = ts__namespace.createPrinter({
48
+ omitTrailingSemicolon: true
49
+ });
50
+ return printer.printList(ts__namespace.ListFormat.MultiLine, nodeArray, sourceFile);
51
+ };
52
+ /**
53
+ * Save the given string representation of TS nodes in a file
54
+ * If the given directory doesn't exist, it'll be created automatically
55
+ *
56
+ * @return The path of the created file
57
+ */ const saveDefinitionToFileSystem = async (dir, file, content)=>{
58
+ const filepath = path__default.default.join(dir, file);
59
+ fse__default.default.ensureDirSync(dir);
60
+ await fse__default.default.writeFile(filepath, content);
61
+ return filepath;
62
+ };
63
+ /**
64
+ * Format the given definitions.
65
+ * Uses the existing config if one is defined in the project.
66
+ */ const format = async (content)=>{
67
+ // eslint-disable-next-line node/no-unsupported-features/es-syntax
68
+ const prettier = await import('prettier'); // ESM-only
69
+ const configFile = await prettier.resolveConfigFile();
70
+ const config = configFile ? await prettier.resolveConfig(configFile) : {
71
+ singleQuote: true,
72
+ useTabs: false,
73
+ tabWidth: 2
74
+ };
75
+ Object.assign(config, {
76
+ parser: 'typescript'
77
+ });
78
+ return prettier.format(content, config);
79
+ };
80
+ /**
81
+ * Generate the extension block for a shared component from strapi/strapi
82
+ *
83
+ * Without strict types, the block augments the `Public` namespace of `@strapi/strapi`, as in
84
+ * previous releases. With strict types, it augments the global `Strapi.Registries` namespace, the
85
+ * only schema registries strict mode reads.
86
+ */ const generateSharedExtensionDefinition = (registry, definitions, { strict = false } = {})=>{
87
+ const properties = definitions.map(({ uid, definition })=>factory.createPropertySignature(undefined, factory.createStringLiteral(uid, true), undefined, factory.createTypeReferenceNode(factory.createIdentifier(definition.name.escapedText))));
88
+ if (strict === true) {
89
+ return generateGlobalRegistryExtension(registry, properties);
90
+ }
91
+ return factory.createModuleDeclaration([
92
+ factory.createModifier(ts__namespace.SyntaxKind.DeclareKeyword)
93
+ ], factory.createStringLiteral(MODULE_DECLARATION, true), factory.createModuleBlock([
94
+ factory.createModuleDeclaration([
95
+ factory.createModifier(ts__namespace.SyntaxKind.ExportKeyword)
96
+ ], factory.createIdentifier(PUBLIC_NAMESPACE), factory.createModuleBlock(properties.length > 0 ? [
97
+ factory.createInterfaceDeclaration([
98
+ factory.createModifier(ts__namespace.SyntaxKind.ExportKeyword)
99
+ ], factory.createIdentifier(registry), undefined, undefined, properties)
100
+ ] : []), ts__namespace.NodeFlags.Namespace)
101
+ ]), ts__namespace.NodeFlags.ExportContext);
102
+ };
103
+ /**
104
+ * `declare global { namespace Strapi { namespace Registries { interface <registry> { … } } } }`
105
+ */ const generateGlobalRegistryExtension = (registry, properties)=>{
106
+ const registryNamespace = factory.createModuleDeclaration(undefined, factory.createIdentifier(REGISTRIES_NAMESPACE), factory.createModuleBlock(properties.length > 0 ? [
107
+ factory.createInterfaceDeclaration(undefined, factory.createIdentifier(registry), undefined, undefined, properties)
108
+ ] : []), ts__namespace.NodeFlags.Namespace);
109
+ const strapiNamespace = factory.createModuleDeclaration(undefined, factory.createIdentifier(GLOBAL_NAMESPACE), factory.createModuleBlock([
110
+ registryNamespace
111
+ ]), ts__namespace.NodeFlags.Namespace);
112
+ return factory.createModuleDeclaration([
113
+ factory.createModifier(ts__namespace.SyntaxKind.DeclareKeyword)
114
+ ], factory.createIdentifier('global'), factory.createModuleBlock([
115
+ strapiNamespace
116
+ ]), ts__namespace.NodeFlags.GlobalAugmentation);
117
+ };
118
+ const createLogger = (options = {})=>{
119
+ const { silent = false, debug = false } = options;
120
+ const state = {
121
+ errors: 0,
122
+ warning: 0
123
+ };
124
+ return {
125
+ get warnings () {
126
+ return state.warning;
127
+ },
128
+ get errors () {
129
+ return state.errors;
130
+ },
131
+ debug (...args) {
132
+ if (silent || !debug) {
133
+ return;
134
+ }
135
+ console.log(chalk__default.default.cyan(`[DEBUG]\t[${new Date().toISOString()}] (Typegen)`), ...args);
136
+ },
137
+ info (...args) {
138
+ if (silent) {
139
+ return;
140
+ }
141
+ console.info(chalk__default.default.blue(`[INFO]\t[${new Date().toISOString()}] (Typegen)`), ...args);
142
+ },
143
+ warn (...args) {
144
+ state.warning += 1;
145
+ if (silent) {
146
+ return;
147
+ }
148
+ console.warn(chalk__default.default.yellow(`[WARN]\t[${new Date().toISOString()}] (Typegen)`), ...args);
149
+ },
150
+ error (...args) {
151
+ state.errors += 1;
152
+ if (silent) {
153
+ return;
154
+ }
155
+ console.error(chalk__default.default.red(`[ERROR]\t[${new Date().toISOString()}] (Typegen)`), ...args);
156
+ }
157
+ };
158
+ };
159
+ const timer = ()=>{
160
+ const state = {
161
+ start: null,
162
+ end: null
163
+ };
164
+ return {
165
+ start () {
166
+ assert__default.default(state.start === null, 'The timer has already been started');
167
+ assert__default.default(state.end === null, 'The timer has already been ended');
168
+ state.start = Date.now();
169
+ return this;
170
+ },
171
+ end () {
172
+ assert__default.default(state.start !== null, 'The timer needs to be started before ending it');
173
+ assert__default.default(state.end === null, 'The timer has already been ended');
174
+ state.end = Date.now();
175
+ return this;
176
+ },
177
+ get duration () {
178
+ assert__default.default(state.start !== null, 'The timer has not been started');
179
+ return ((state.end ?? Date.now) - state.start) / 1000;
180
+ }
181
+ };
182
+ };
183
+ /**
184
+ * Resolve to `true` when the given path exists, `false` otherwise
185
+ */ const pathExists = async (target)=>{
186
+ try {
187
+ await fs__default.default.access(target);
188
+ return true;
189
+ } catch {
190
+ return false;
191
+ }
192
+ };
193
+
194
+ exports.createLogger = createLogger;
195
+ exports.emitDefinitions = emitDefinitions;
196
+ exports.format = format;
197
+ exports.generateSharedExtensionDefinition = generateSharedExtensionDefinition;
198
+ exports.pathExists = pathExists;
199
+ exports.saveDefinitionToFileSystem = saveDefinitionToFileSystem;
200
+ exports.timer = timer;
201
+ //# sourceMappingURL=utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.js","sources":["../../src/generators/utils.ts"],"sourcesContent":["import path from 'node:path';\nimport assert from 'node:assert';\nimport * as ts from 'typescript';\nimport fs from 'node:fs/promises';\nimport fse from 'fs-extra';\nimport chalk from 'chalk';\n\nconst { factory } = ts;\n\nconst MODULE_DECLARATION = '@strapi/strapi';\nconst PUBLIC_NAMESPACE = 'Public';\nconst GLOBAL_NAMESPACE = 'Strapi';\nconst REGISTRIES_NAMESPACE = 'Registries';\n\n/**\n * Aggregate the given TypeScript nodes into a single string\n */\nexport const emitDefinitions = (definitions: ts.Node[]): string => {\n const nodeArray = factory.createNodeArray(definitions);\n\n const sourceFile = ts.createSourceFile(\n 'placeholder.ts',\n '',\n ts.ScriptTarget.ESNext,\n true,\n ts.ScriptKind.TS\n );\n\n const printer = ts.createPrinter({ omitTrailingSemicolon: true });\n\n return printer.printList(ts.ListFormat.MultiLine, nodeArray, sourceFile);\n};\n\n/**\n * Save the given string representation of TS nodes in a file\n * If the given directory doesn't exist, it'll be created automatically\n *\n * @return The path of the created file\n */\nexport const saveDefinitionToFileSystem = async (\n dir: string,\n file: string,\n content: string\n): Promise<string> => {\n const filepath = path.join(dir, file);\n\n fse.ensureDirSync(dir);\n await fse.writeFile(filepath, content);\n\n return filepath;\n};\n\n/**\n * Format the given definitions.\n * Uses the existing config if one is defined in the project.\n */\nexport const format = async (content: string): Promise<string> => {\n // eslint-disable-next-line node/no-unsupported-features/es-syntax\n const prettier = await import('prettier'); // ESM-only\n\n const configFile = await prettier.resolveConfigFile();\n const config: any = configFile\n ? await prettier.resolveConfig(configFile)\n : // Default config\n {\n singleQuote: true,\n useTabs: false,\n tabWidth: 2,\n };\n\n Object.assign(config, { parser: 'typescript' });\n\n return prettier.format(content, config);\n};\n\n/**\n * Generate the extension block for a shared component from strapi/strapi\n *\n * Without strict types, the block augments the `Public` namespace of `@strapi/strapi`, as in\n * previous releases. With strict types, it augments the global `Strapi.Registries` namespace, the\n * only schema registries strict mode reads.\n */\nexport const generateSharedExtensionDefinition = (\n registry: string,\n definitions: Array<{ uid: string; definition: ts.InterfaceDeclaration }>,\n { strict = false }: { strict?: boolean } = {}\n): ts.ModuleDeclaration => {\n const properties = definitions.map(({ uid, definition }) =>\n factory.createPropertySignature(\n undefined,\n factory.createStringLiteral(uid, true),\n undefined,\n factory.createTypeReferenceNode(\n factory.createIdentifier(definition.name.escapedText as string)\n )\n )\n );\n\n if (strict === true) {\n return generateGlobalRegistryExtension(registry, properties);\n }\n\n return factory.createModuleDeclaration(\n [factory.createModifier(ts.SyntaxKind.DeclareKeyword)],\n factory.createStringLiteral(MODULE_DECLARATION, true),\n factory.createModuleBlock([\n factory.createModuleDeclaration(\n [factory.createModifier(ts.SyntaxKind.ExportKeyword)],\n factory.createIdentifier(PUBLIC_NAMESPACE),\n factory.createModuleBlock(\n properties.length > 0\n ? [\n factory.createInterfaceDeclaration(\n [factory.createModifier(ts.SyntaxKind.ExportKeyword)],\n factory.createIdentifier(registry),\n undefined,\n undefined,\n properties\n ),\n ]\n : []\n ),\n ts.NodeFlags.Namespace\n ),\n ]),\n ts.NodeFlags.ExportContext\n );\n};\n\n/**\n * `declare global { namespace Strapi { namespace Registries { interface <registry> { … } } } }`\n */\nconst generateGlobalRegistryExtension = (\n registry: string,\n properties: ts.PropertySignature[]\n): ts.ModuleDeclaration => {\n const registryNamespace = factory.createModuleDeclaration(\n undefined,\n factory.createIdentifier(REGISTRIES_NAMESPACE),\n factory.createModuleBlock(\n properties.length > 0\n ? [\n factory.createInterfaceDeclaration(\n undefined,\n factory.createIdentifier(registry),\n undefined,\n undefined,\n properties\n ),\n ]\n : []\n ),\n ts.NodeFlags.Namespace\n );\n\n const strapiNamespace = factory.createModuleDeclaration(\n undefined,\n factory.createIdentifier(GLOBAL_NAMESPACE),\n factory.createModuleBlock([registryNamespace]),\n ts.NodeFlags.Namespace\n );\n\n return factory.createModuleDeclaration(\n [factory.createModifier(ts.SyntaxKind.DeclareKeyword)],\n factory.createIdentifier('global'),\n factory.createModuleBlock([strapiNamespace]),\n ts.NodeFlags.GlobalAugmentation\n );\n};\n\ninterface CreateLoggerOptions {\n silent?: boolean;\n debug?: boolean;\n}\n\nexport const createLogger = (options: CreateLoggerOptions = {}) => {\n const { silent = false, debug = false } = options;\n\n const state = { errors: 0, warning: 0 };\n\n return {\n get warnings() {\n return state.warning;\n },\n\n get errors() {\n return state.errors;\n },\n\n debug(...args: any[]) {\n if (silent || !debug) {\n return;\n }\n\n console.log(chalk.cyan(`[DEBUG]\\t[${new Date().toISOString()}] (Typegen)`), ...args);\n },\n\n info(...args: any[]) {\n if (silent) {\n return;\n }\n\n console.info(chalk.blue(`[INFO]\\t[${new Date().toISOString()}] (Typegen)`), ...args);\n },\n\n warn(...args: any[]) {\n state.warning += 1;\n\n if (silent) {\n return;\n }\n\n console.warn(chalk.yellow(`[WARN]\\t[${new Date().toISOString()}] (Typegen)`), ...args);\n },\n\n error(...args: any[]) {\n state.errors += 1;\n\n if (silent) {\n return;\n }\n\n console.error(chalk.red(`[ERROR]\\t[${new Date().toISOString()}] (Typegen)`), ...args);\n },\n };\n};\n\nexport const timer = () => {\n const state: { start: number | null; end: number | null } = {\n start: null,\n end: null,\n };\n\n return {\n start() {\n assert(state.start === null, 'The timer has already been started');\n assert(state.end === null, 'The timer has already been ended');\n\n state.start = Date.now();\n\n return this;\n },\n\n end() {\n assert(state.start !== null, 'The timer needs to be started before ending it');\n assert(state.end === null, 'The timer has already been ended');\n\n state.end = Date.now();\n\n return this;\n },\n\n get duration() {\n assert(state.start !== null, 'The timer has not been started');\n\n return (((state.end ?? Date.now) as any) - (state.start as number)) / 1000;\n },\n };\n};\n\n/**\n * Resolve to `true` when the given path exists, `false` otherwise\n */\nexport const pathExists = async (target: string): Promise<boolean> => {\n try {\n await fs.access(target);\n return true;\n } catch {\n return false;\n }\n};\n\nexport type Logger = ReturnType<typeof createLogger>;\n\n/**\n * Options passed to each artifact generator.\n */\nexport interface GeneratorOptions {\n strapi: any;\n logger: Logger;\n pwd?: string;\n appDir?: string;\n /**\n * Whether the application enables `typescript.strictTypes`. Schema generators then write the\n * global `Strapi.Registries` form instead of the `Public` form.\n */\n strict?: boolean;\n}\n"],"names":["factory","ts","MODULE_DECLARATION","PUBLIC_NAMESPACE","GLOBAL_NAMESPACE","REGISTRIES_NAMESPACE","emitDefinitions","definitions","nodeArray","createNodeArray","sourceFile","createSourceFile","ScriptTarget","ESNext","ScriptKind","TS","printer","createPrinter","omitTrailingSemicolon","printList","ListFormat","MultiLine","saveDefinitionToFileSystem","dir","file","content","filepath","path","join","fse","ensureDirSync","writeFile","format","prettier","configFile","resolveConfigFile","config","resolveConfig","singleQuote","useTabs","tabWidth","Object","assign","parser","generateSharedExtensionDefinition","registry","strict","properties","map","uid","definition","createPropertySignature","undefined","createStringLiteral","createTypeReferenceNode","createIdentifier","name","escapedText","generateGlobalRegistryExtension","createModuleDeclaration","createModifier","SyntaxKind","DeclareKeyword","createModuleBlock","ExportKeyword","length","createInterfaceDeclaration","NodeFlags","Namespace","ExportContext","registryNamespace","strapiNamespace","GlobalAugmentation","createLogger","options","silent","debug","state","errors","warning","warnings","args","console","log","chalk","cyan","Date","toISOString","info","blue","warn","yellow","error","red","timer","start","end","assert","now","duration","pathExists","target","fs","access"],"mappings":"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"}
@@ -0,0 +1,166 @@
1
+ import path from 'node:path';
2
+ import assert from 'node:assert';
3
+ import * as ts from 'typescript';
4
+ import fs from 'node:fs/promises';
5
+ import fse from 'fs-extra';
6
+ import chalk from 'chalk';
7
+
8
+ const { factory } = ts;
9
+ const MODULE_DECLARATION = '@strapi/strapi';
10
+ const PUBLIC_NAMESPACE = 'Public';
11
+ const GLOBAL_NAMESPACE = 'Strapi';
12
+ const REGISTRIES_NAMESPACE = 'Registries';
13
+ /**
14
+ * Aggregate the given TypeScript nodes into a single string
15
+ */ const emitDefinitions = (definitions)=>{
16
+ const nodeArray = factory.createNodeArray(definitions);
17
+ const sourceFile = ts.createSourceFile('placeholder.ts', '', ts.ScriptTarget.ESNext, true, ts.ScriptKind.TS);
18
+ const printer = ts.createPrinter({
19
+ omitTrailingSemicolon: true
20
+ });
21
+ return printer.printList(ts.ListFormat.MultiLine, nodeArray, sourceFile);
22
+ };
23
+ /**
24
+ * Save the given string representation of TS nodes in a file
25
+ * If the given directory doesn't exist, it'll be created automatically
26
+ *
27
+ * @return The path of the created file
28
+ */ const saveDefinitionToFileSystem = async (dir, file, content)=>{
29
+ const filepath = path.join(dir, file);
30
+ fse.ensureDirSync(dir);
31
+ await fse.writeFile(filepath, content);
32
+ return filepath;
33
+ };
34
+ /**
35
+ * Format the given definitions.
36
+ * Uses the existing config if one is defined in the project.
37
+ */ const format = async (content)=>{
38
+ // eslint-disable-next-line node/no-unsupported-features/es-syntax
39
+ const prettier = await import('prettier'); // ESM-only
40
+ const configFile = await prettier.resolveConfigFile();
41
+ const config = configFile ? await prettier.resolveConfig(configFile) : {
42
+ singleQuote: true,
43
+ useTabs: false,
44
+ tabWidth: 2
45
+ };
46
+ Object.assign(config, {
47
+ parser: 'typescript'
48
+ });
49
+ return prettier.format(content, config);
50
+ };
51
+ /**
52
+ * Generate the extension block for a shared component from strapi/strapi
53
+ *
54
+ * Without strict types, the block augments the `Public` namespace of `@strapi/strapi`, as in
55
+ * previous releases. With strict types, it augments the global `Strapi.Registries` namespace, the
56
+ * only schema registries strict mode reads.
57
+ */ const generateSharedExtensionDefinition = (registry, definitions, { strict = false } = {})=>{
58
+ const properties = definitions.map(({ uid, definition })=>factory.createPropertySignature(undefined, factory.createStringLiteral(uid, true), undefined, factory.createTypeReferenceNode(factory.createIdentifier(definition.name.escapedText))));
59
+ if (strict === true) {
60
+ return generateGlobalRegistryExtension(registry, properties);
61
+ }
62
+ return factory.createModuleDeclaration([
63
+ factory.createModifier(ts.SyntaxKind.DeclareKeyword)
64
+ ], factory.createStringLiteral(MODULE_DECLARATION, true), factory.createModuleBlock([
65
+ factory.createModuleDeclaration([
66
+ factory.createModifier(ts.SyntaxKind.ExportKeyword)
67
+ ], factory.createIdentifier(PUBLIC_NAMESPACE), factory.createModuleBlock(properties.length > 0 ? [
68
+ factory.createInterfaceDeclaration([
69
+ factory.createModifier(ts.SyntaxKind.ExportKeyword)
70
+ ], factory.createIdentifier(registry), undefined, undefined, properties)
71
+ ] : []), ts.NodeFlags.Namespace)
72
+ ]), ts.NodeFlags.ExportContext);
73
+ };
74
+ /**
75
+ * `declare global { namespace Strapi { namespace Registries { interface <registry> { … } } } }`
76
+ */ const generateGlobalRegistryExtension = (registry, properties)=>{
77
+ const registryNamespace = factory.createModuleDeclaration(undefined, factory.createIdentifier(REGISTRIES_NAMESPACE), factory.createModuleBlock(properties.length > 0 ? [
78
+ factory.createInterfaceDeclaration(undefined, factory.createIdentifier(registry), undefined, undefined, properties)
79
+ ] : []), ts.NodeFlags.Namespace);
80
+ const strapiNamespace = factory.createModuleDeclaration(undefined, factory.createIdentifier(GLOBAL_NAMESPACE), factory.createModuleBlock([
81
+ registryNamespace
82
+ ]), ts.NodeFlags.Namespace);
83
+ return factory.createModuleDeclaration([
84
+ factory.createModifier(ts.SyntaxKind.DeclareKeyword)
85
+ ], factory.createIdentifier('global'), factory.createModuleBlock([
86
+ strapiNamespace
87
+ ]), ts.NodeFlags.GlobalAugmentation);
88
+ };
89
+ const createLogger = (options = {})=>{
90
+ const { silent = false, debug = false } = options;
91
+ const state = {
92
+ errors: 0,
93
+ warning: 0
94
+ };
95
+ return {
96
+ get warnings () {
97
+ return state.warning;
98
+ },
99
+ get errors () {
100
+ return state.errors;
101
+ },
102
+ debug (...args) {
103
+ if (silent || !debug) {
104
+ return;
105
+ }
106
+ console.log(chalk.cyan(`[DEBUG]\t[${new Date().toISOString()}] (Typegen)`), ...args);
107
+ },
108
+ info (...args) {
109
+ if (silent) {
110
+ return;
111
+ }
112
+ console.info(chalk.blue(`[INFO]\t[${new Date().toISOString()}] (Typegen)`), ...args);
113
+ },
114
+ warn (...args) {
115
+ state.warning += 1;
116
+ if (silent) {
117
+ return;
118
+ }
119
+ console.warn(chalk.yellow(`[WARN]\t[${new Date().toISOString()}] (Typegen)`), ...args);
120
+ },
121
+ error (...args) {
122
+ state.errors += 1;
123
+ if (silent) {
124
+ return;
125
+ }
126
+ console.error(chalk.red(`[ERROR]\t[${new Date().toISOString()}] (Typegen)`), ...args);
127
+ }
128
+ };
129
+ };
130
+ const timer = ()=>{
131
+ const state = {
132
+ start: null,
133
+ end: null
134
+ };
135
+ return {
136
+ start () {
137
+ assert(state.start === null, 'The timer has already been started');
138
+ assert(state.end === null, 'The timer has already been ended');
139
+ state.start = Date.now();
140
+ return this;
141
+ },
142
+ end () {
143
+ assert(state.start !== null, 'The timer needs to be started before ending it');
144
+ assert(state.end === null, 'The timer has already been ended');
145
+ state.end = Date.now();
146
+ return this;
147
+ },
148
+ get duration () {
149
+ assert(state.start !== null, 'The timer has not been started');
150
+ return ((state.end ?? Date.now) - state.start) / 1000;
151
+ }
152
+ };
153
+ };
154
+ /**
155
+ * Resolve to `true` when the given path exists, `false` otherwise
156
+ */ const pathExists = async (target)=>{
157
+ try {
158
+ await fs.access(target);
159
+ return true;
160
+ } catch {
161
+ return false;
162
+ }
163
+ };
164
+
165
+ export { createLogger, emitDefinitions, format, generateSharedExtensionDefinition, pathExists, saveDefinitionToFileSystem, timer };
166
+ //# sourceMappingURL=utils.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.mjs","sources":["../../src/generators/utils.ts"],"sourcesContent":["import path from 'node:path';\nimport assert from 'node:assert';\nimport * as ts from 'typescript';\nimport fs from 'node:fs/promises';\nimport fse from 'fs-extra';\nimport chalk from 'chalk';\n\nconst { factory } = ts;\n\nconst MODULE_DECLARATION = '@strapi/strapi';\nconst PUBLIC_NAMESPACE = 'Public';\nconst GLOBAL_NAMESPACE = 'Strapi';\nconst REGISTRIES_NAMESPACE = 'Registries';\n\n/**\n * Aggregate the given TypeScript nodes into a single string\n */\nexport const emitDefinitions = (definitions: ts.Node[]): string => {\n const nodeArray = factory.createNodeArray(definitions);\n\n const sourceFile = ts.createSourceFile(\n 'placeholder.ts',\n '',\n ts.ScriptTarget.ESNext,\n true,\n ts.ScriptKind.TS\n );\n\n const printer = ts.createPrinter({ omitTrailingSemicolon: true });\n\n return printer.printList(ts.ListFormat.MultiLine, nodeArray, sourceFile);\n};\n\n/**\n * Save the given string representation of TS nodes in a file\n * If the given directory doesn't exist, it'll be created automatically\n *\n * @return The path of the created file\n */\nexport const saveDefinitionToFileSystem = async (\n dir: string,\n file: string,\n content: string\n): Promise<string> => {\n const filepath = path.join(dir, file);\n\n fse.ensureDirSync(dir);\n await fse.writeFile(filepath, content);\n\n return filepath;\n};\n\n/**\n * Format the given definitions.\n * Uses the existing config if one is defined in the project.\n */\nexport const format = async (content: string): Promise<string> => {\n // eslint-disable-next-line node/no-unsupported-features/es-syntax\n const prettier = await import('prettier'); // ESM-only\n\n const configFile = await prettier.resolveConfigFile();\n const config: any = configFile\n ? await prettier.resolveConfig(configFile)\n : // Default config\n {\n singleQuote: true,\n useTabs: false,\n tabWidth: 2,\n };\n\n Object.assign(config, { parser: 'typescript' });\n\n return prettier.format(content, config);\n};\n\n/**\n * Generate the extension block for a shared component from strapi/strapi\n *\n * Without strict types, the block augments the `Public` namespace of `@strapi/strapi`, as in\n * previous releases. With strict types, it augments the global `Strapi.Registries` namespace, the\n * only schema registries strict mode reads.\n */\nexport const generateSharedExtensionDefinition = (\n registry: string,\n definitions: Array<{ uid: string; definition: ts.InterfaceDeclaration }>,\n { strict = false }: { strict?: boolean } = {}\n): ts.ModuleDeclaration => {\n const properties = definitions.map(({ uid, definition }) =>\n factory.createPropertySignature(\n undefined,\n factory.createStringLiteral(uid, true),\n undefined,\n factory.createTypeReferenceNode(\n factory.createIdentifier(definition.name.escapedText as string)\n )\n )\n );\n\n if (strict === true) {\n return generateGlobalRegistryExtension(registry, properties);\n }\n\n return factory.createModuleDeclaration(\n [factory.createModifier(ts.SyntaxKind.DeclareKeyword)],\n factory.createStringLiteral(MODULE_DECLARATION, true),\n factory.createModuleBlock([\n factory.createModuleDeclaration(\n [factory.createModifier(ts.SyntaxKind.ExportKeyword)],\n factory.createIdentifier(PUBLIC_NAMESPACE),\n factory.createModuleBlock(\n properties.length > 0\n ? [\n factory.createInterfaceDeclaration(\n [factory.createModifier(ts.SyntaxKind.ExportKeyword)],\n factory.createIdentifier(registry),\n undefined,\n undefined,\n properties\n ),\n ]\n : []\n ),\n ts.NodeFlags.Namespace\n ),\n ]),\n ts.NodeFlags.ExportContext\n );\n};\n\n/**\n * `declare global { namespace Strapi { namespace Registries { interface <registry> { … } } } }`\n */\nconst generateGlobalRegistryExtension = (\n registry: string,\n properties: ts.PropertySignature[]\n): ts.ModuleDeclaration => {\n const registryNamespace = factory.createModuleDeclaration(\n undefined,\n factory.createIdentifier(REGISTRIES_NAMESPACE),\n factory.createModuleBlock(\n properties.length > 0\n ? [\n factory.createInterfaceDeclaration(\n undefined,\n factory.createIdentifier(registry),\n undefined,\n undefined,\n properties\n ),\n ]\n : []\n ),\n ts.NodeFlags.Namespace\n );\n\n const strapiNamespace = factory.createModuleDeclaration(\n undefined,\n factory.createIdentifier(GLOBAL_NAMESPACE),\n factory.createModuleBlock([registryNamespace]),\n ts.NodeFlags.Namespace\n );\n\n return factory.createModuleDeclaration(\n [factory.createModifier(ts.SyntaxKind.DeclareKeyword)],\n factory.createIdentifier('global'),\n factory.createModuleBlock([strapiNamespace]),\n ts.NodeFlags.GlobalAugmentation\n );\n};\n\ninterface CreateLoggerOptions {\n silent?: boolean;\n debug?: boolean;\n}\n\nexport const createLogger = (options: CreateLoggerOptions = {}) => {\n const { silent = false, debug = false } = options;\n\n const state = { errors: 0, warning: 0 };\n\n return {\n get warnings() {\n return state.warning;\n },\n\n get errors() {\n return state.errors;\n },\n\n debug(...args: any[]) {\n if (silent || !debug) {\n return;\n }\n\n console.log(chalk.cyan(`[DEBUG]\\t[${new Date().toISOString()}] (Typegen)`), ...args);\n },\n\n info(...args: any[]) {\n if (silent) {\n return;\n }\n\n console.info(chalk.blue(`[INFO]\\t[${new Date().toISOString()}] (Typegen)`), ...args);\n },\n\n warn(...args: any[]) {\n state.warning += 1;\n\n if (silent) {\n return;\n }\n\n console.warn(chalk.yellow(`[WARN]\\t[${new Date().toISOString()}] (Typegen)`), ...args);\n },\n\n error(...args: any[]) {\n state.errors += 1;\n\n if (silent) {\n return;\n }\n\n console.error(chalk.red(`[ERROR]\\t[${new Date().toISOString()}] (Typegen)`), ...args);\n },\n };\n};\n\nexport const timer = () => {\n const state: { start: number | null; end: number | null } = {\n start: null,\n end: null,\n };\n\n return {\n start() {\n assert(state.start === null, 'The timer has already been started');\n assert(state.end === null, 'The timer has already been ended');\n\n state.start = Date.now();\n\n return this;\n },\n\n end() {\n assert(state.start !== null, 'The timer needs to be started before ending it');\n assert(state.end === null, 'The timer has already been ended');\n\n state.end = Date.now();\n\n return this;\n },\n\n get duration() {\n assert(state.start !== null, 'The timer has not been started');\n\n return (((state.end ?? Date.now) as any) - (state.start as number)) / 1000;\n },\n };\n};\n\n/**\n * Resolve to `true` when the given path exists, `false` otherwise\n */\nexport const pathExists = async (target: string): Promise<boolean> => {\n try {\n await fs.access(target);\n return true;\n } catch {\n return false;\n }\n};\n\nexport type Logger = ReturnType<typeof createLogger>;\n\n/**\n * Options passed to each artifact generator.\n */\nexport interface GeneratorOptions {\n strapi: any;\n logger: Logger;\n pwd?: string;\n appDir?: string;\n /**\n * Whether the application enables `typescript.strictTypes`. Schema generators then write the\n * global `Strapi.Registries` form instead of the `Public` form.\n */\n strict?: boolean;\n}\n"],"names":["factory","ts","MODULE_DECLARATION","PUBLIC_NAMESPACE","GLOBAL_NAMESPACE","REGISTRIES_NAMESPACE","emitDefinitions","definitions","nodeArray","createNodeArray","sourceFile","createSourceFile","ScriptTarget","ESNext","ScriptKind","TS","printer","createPrinter","omitTrailingSemicolon","printList","ListFormat","MultiLine","saveDefinitionToFileSystem","dir","file","content","filepath","path","join","fse","ensureDirSync","writeFile","format","prettier","configFile","resolveConfigFile","config","resolveConfig","singleQuote","useTabs","tabWidth","Object","assign","parser","generateSharedExtensionDefinition","registry","strict","properties","map","uid","definition","createPropertySignature","undefined","createStringLiteral","createTypeReferenceNode","createIdentifier","name","escapedText","generateGlobalRegistryExtension","createModuleDeclaration","createModifier","SyntaxKind","DeclareKeyword","createModuleBlock","ExportKeyword","length","createInterfaceDeclaration","NodeFlags","Namespace","ExportContext","registryNamespace","strapiNamespace","GlobalAugmentation","createLogger","options","silent","debug","state","errors","warning","warnings","args","console","log","chalk","cyan","Date","toISOString","info","blue","warn","yellow","error","red","timer","start","end","assert","now","duration","pathExists","target","fs","access"],"mappings":";;;;;;;AAOA,MAAM,EAAEA,OAAO,EAAE,GAAGC,EAAAA;AAEpB,MAAMC,kBAAAA,GAAqB,gBAAA;AAC3B,MAAMC,gBAAAA,GAAmB,QAAA;AACzB,MAAMC,gBAAAA,GAAmB,QAAA;AACzB,MAAMC,oBAAAA,GAAuB,YAAA;AAE7B;;IAGO,MAAMC,eAAAA,GAAkB,CAACC,WAAAA,GAAAA;IAC9B,MAAMC,SAAAA,GAAYR,OAAAA,CAAQS,eAAe,CAACF,WAAAA,CAAAA;AAE1C,IAAA,MAAMG,UAAAA,GAAaT,EAAAA,CAAGU,gBAAgB,CACpC,kBACA,EAAA,EACAV,EAAAA,CAAGW,YAAY,CAACC,MAAM,EACtB,IAAA,EACAZ,EAAAA,CAAGa,UAAU,CAACC,EAAE,CAAA;IAGlB,MAAMC,OAAAA,GAAUf,EAAAA,CAAGgB,aAAa,CAAC;QAAEC,qBAAAA,EAAuB;AAAK,KAAA,CAAA;IAE/D,OAAOF,OAAAA,CAAQG,SAAS,CAAClB,EAAAA,CAAGmB,UAAU,CAACC,SAAS,EAAEb,SAAAA,EAAWE,UAAAA,CAAAA;AAC/D;AAEA;;;;;AAKC,IACM,MAAMY,0BAAAA,GAA6B,OACxCC,KACAC,IAAAA,EACAC,OAAAA,GAAAA;AAEA,IAAA,MAAMC,QAAAA,GAAWC,IAAAA,CAAKC,IAAI,CAACL,GAAAA,EAAKC,IAAAA,CAAAA;AAEhCK,IAAAA,GAAAA,CAAIC,aAAa,CAACP,GAAAA,CAAAA;IAClB,MAAMM,GAAAA,CAAIE,SAAS,CAACL,QAAAA,EAAUD,OAAAA,CAAAA;IAE9B,OAAOC,QAAAA;AACT;AAEA;;;IAIO,MAAMM,MAAAA,GAAS,OAAOP,OAAAA,GAAAA;;AAE3B,IAAA,MAAMQ,QAAAA,GAAW,MAAM,OAAO;IAE9B,MAAMC,UAAAA,GAAa,MAAMD,QAAAA,CAASE,iBAAiB,EAAA;AACnD,IAAA,MAAMC,SAAcF,UAAAA,GAChB,MAAMD,QAAAA,CAASI,aAAa,CAACH,UAAAA,CAAAA,GAE7B;QACEI,WAAAA,EAAa,IAAA;QACbC,OAAAA,EAAS,KAAA;QACTC,QAAAA,EAAU;AACZ,KAAA;IAEJC,MAAAA,CAAOC,MAAM,CAACN,MAAAA,EAAQ;QAAEO,MAAAA,EAAQ;AAAa,KAAA,CAAA;IAE7C,OAAOV,QAAAA,CAASD,MAAM,CAACP,OAAAA,EAASW,MAAAA,CAAAA;AAClC;AAEA;;;;;;AAMC,IACM,MAAMQ,iCAAAA,GAAoC,CAC/CC,QAAAA,EACAtC,WAAAA,EACA,EAAEuC,MAAAA,GAAS,KAAK,EAAwB,GAAG,EAAE,GAAA;AAE7C,IAAA,MAAMC,UAAAA,GAAaxC,WAAAA,CAAYyC,GAAG,CAAC,CAAC,EAAEC,GAAG,EAAEC,UAAU,EAAE,GACrDlD,OAAAA,CAAQmD,uBAAuB,CAC7BC,SAAAA,EACApD,OAAAA,CAAQqD,mBAAmB,CAACJ,GAAAA,EAAK,IAAA,CAAA,EACjCG,SAAAA,EACApD,OAAAA,CAAQsD,uBAAuB,CAC7BtD,OAAAA,CAAQuD,gBAAgB,CAACL,UAAAA,CAAWM,IAAI,CAACC,WAAW,CAAA,CAAA,CAAA,CAAA;AAK1D,IAAA,IAAIX,WAAW,IAAA,EAAM;AACnB,QAAA,OAAOY,gCAAgCb,QAAAA,EAAUE,UAAAA,CAAAA;AACnD,IAAA;IAEA,OAAO/C,OAAAA,CAAQ2D,uBAAuB,CACpC;AAAC3D,QAAAA,OAAAA,CAAQ4D,cAAc,CAAC3D,EAAAA,CAAG4D,UAAU,CAACC,cAAc;AAAE,KAAA,EACtD9D,QAAQqD,mBAAmB,CAACnD,oBAAoB,IAAA,CAAA,EAChDF,OAAAA,CAAQ+D,iBAAiB,CAAC;AACxB/D,QAAAA,OAAAA,CAAQ2D,uBAAuB,CAC7B;AAAC3D,YAAAA,OAAAA,CAAQ4D,cAAc,CAAC3D,EAAAA,CAAG4D,UAAU,CAACG,aAAa;SAAE,EACrDhE,OAAAA,CAAQuD,gBAAgB,CAACpD,gBAAAA,CAAAA,EACzBH,OAAAA,CAAQ+D,iBAAiB,CACvBhB,UAAAA,CAAWkB,MAAM,GAAG,CAAA,GAChB;AACEjE,YAAAA,OAAAA,CAAQkE,0BAA0B,CAChC;AAAClE,gBAAAA,OAAAA,CAAQ4D,cAAc,CAAC3D,EAAAA,CAAG4D,UAAU,CAACG,aAAa;AAAE,aAAA,EACrDhE,OAAAA,CAAQuD,gBAAgB,CAACV,QAAAA,CAAAA,EACzBO,WACAA,SAAAA,EACAL,UAAAA;AAEH,SAAA,GACD,EAAE,CAAA,EAER9C,EAAAA,CAAGkE,SAAS,CAACC,SAAS;KAEzB,CAAA,EACDnE,EAAAA,CAAGkE,SAAS,CAACE,aAAa,CAAA;AAE9B;AAEA;;IAGA,MAAMX,+BAAAA,GAAkC,CACtCb,QAAAA,EACAE,UAAAA,GAAAA;AAEA,IAAA,MAAMuB,iBAAAA,GAAoBtE,OAAAA,CAAQ2D,uBAAuB,CACvDP,WACApD,OAAAA,CAAQuD,gBAAgB,CAAClD,oBAAAA,CAAAA,EACzBL,QAAQ+D,iBAAiB,CACvBhB,UAAAA,CAAWkB,MAAM,GAAG,CAAA,GAChB;QACEjE,OAAAA,CAAQkE,0BAA0B,CAChCd,SAAAA,EACApD,OAAAA,CAAQuD,gBAAgB,CAACV,QAAAA,CAAAA,EACzBO,WACAA,SAAAA,EACAL,UAAAA;AAEH,KAAA,GACD,EAAE,CAAA,EAER9C,EAAAA,CAAGkE,SAAS,CAACC,SAAS,CAAA;IAGxB,MAAMG,eAAAA,GAAkBvE,OAAAA,CAAQ2D,uBAAuB,CACrDP,SAAAA,EACApD,OAAAA,CAAQuD,gBAAgB,CAACnD,gBAAAA,CAAAA,EACzBJ,OAAAA,CAAQ+D,iBAAiB,CAAC;AAACO,QAAAA;KAAkB,CAAA,EAC7CrE,EAAAA,CAAGkE,SAAS,CAACC,SAAS,CAAA;IAGxB,OAAOpE,OAAAA,CAAQ2D,uBAAuB,CACpC;AAAC3D,QAAAA,OAAAA,CAAQ4D,cAAc,CAAC3D,EAAAA,CAAG4D,UAAU,CAACC,cAAc;AAAE,KAAA,EACtD9D,QAAQuD,gBAAgB,CAAC,QAAA,CAAA,EACzBvD,OAAAA,CAAQ+D,iBAAiB,CAAC;AAACQ,QAAAA;KAAgB,CAAA,EAC3CtE,EAAAA,CAAGkE,SAAS,CAACK,kBAAkB,CAAA;AAEnC,CAAA;AAOO,MAAMC,YAAAA,GAAe,CAACC,OAAAA,GAA+B,EAAE,GAAA;AAC5D,IAAA,MAAM,EAAEC,MAAAA,GAAS,KAAK,EAAEC,KAAAA,GAAQ,KAAK,EAAE,GAAGF,OAAAA;AAE1C,IAAA,MAAMG,KAAAA,GAAQ;QAAEC,MAAAA,EAAQ,CAAA;QAAGC,OAAAA,EAAS;AAAE,KAAA;IAEtC,OAAO;AACL,QAAA,IAAIC,QAAAA,CAAAA,GAAW;AACb,YAAA,OAAOH,MAAME,OAAO;AACtB,QAAA,CAAA;AAEA,QAAA,IAAID,MAAAA,CAAAA,GAAS;AACX,YAAA,OAAOD,MAAMC,MAAM;AACrB,QAAA,CAAA;AAEAF,QAAAA,KAAAA,CAAAA,CAAM,GAAGK,IAAW,EAAA;YAClB,IAAIN,MAAAA,IAAU,CAACC,KAAAA,EAAO;AACpB,gBAAA;AACF,YAAA;AAEAM,YAAAA,OAAAA,CAAQC,GAAG,CAACC,KAAAA,CAAMC,IAAI,CAAC,CAAC,UAAU,EAAE,IAAIC,IAAAA,EAAAA,CAAOC,WAAW,EAAA,CAAG,WAAW,CAAC,CAAA,EAAA,GAAMN,IAAAA,CAAAA;AACjF,QAAA,CAAA;AAEAO,QAAAA,IAAAA,CAAAA,CAAK,GAAGP,IAAW,EAAA;AACjB,YAAA,IAAIN,MAAAA,EAAQ;AACV,gBAAA;AACF,YAAA;AAEAO,YAAAA,OAAAA,CAAQM,IAAI,CAACJ,KAAAA,CAAMK,IAAI,CAAC,CAAC,SAAS,EAAE,IAAIH,IAAAA,EAAAA,CAAOC,WAAW,EAAA,CAAG,WAAW,CAAC,CAAA,EAAA,GAAMN,IAAAA,CAAAA;AACjF,QAAA,CAAA;AAEAS,QAAAA,IAAAA,CAAAA,CAAK,GAAGT,IAAW,EAAA;AACjBJ,YAAAA,KAAAA,CAAME,OAAO,IAAI,CAAA;AAEjB,YAAA,IAAIJ,MAAAA,EAAQ;AACV,gBAAA;AACF,YAAA;AAEAO,YAAAA,OAAAA,CAAQQ,IAAI,CAACN,KAAAA,CAAMO,MAAM,CAAC,CAAC,SAAS,EAAE,IAAIL,IAAAA,EAAAA,CAAOC,WAAW,EAAA,CAAG,WAAW,CAAC,CAAA,EAAA,GAAMN,IAAAA,CAAAA;AACnF,QAAA,CAAA;AAEAW,QAAAA,KAAAA,CAAAA,CAAM,GAAGX,IAAW,EAAA;AAClBJ,YAAAA,KAAAA,CAAMC,MAAM,IAAI,CAAA;AAEhB,YAAA,IAAIH,MAAAA,EAAQ;AACV,gBAAA;AACF,YAAA;AAEAO,YAAAA,OAAAA,CAAQU,KAAK,CAACR,KAAAA,CAAMS,GAAG,CAAC,CAAC,UAAU,EAAE,IAAIP,IAAAA,EAAAA,CAAOC,WAAW,EAAA,CAAG,WAAW,CAAC,CAAA,EAAA,GAAMN,IAAAA,CAAAA;AAClF,QAAA;AACF,KAAA;AACF;MAEaa,KAAAA,GAAQ,IAAA;AACnB,IAAA,MAAMjB,KAAAA,GAAsD;QAC1DkB,KAAAA,EAAO,IAAA;QACPC,GAAAA,EAAK;AACP,KAAA;IAEA,OAAO;AACLD,QAAAA,KAAAA,CAAAA,GAAAA;YACEE,MAAAA,CAAOpB,KAAAA,CAAMkB,KAAK,KAAK,IAAA,EAAM,oCAAA,CAAA;YAC7BE,MAAAA,CAAOpB,KAAAA,CAAMmB,GAAG,KAAK,IAAA,EAAM,kCAAA,CAAA;YAE3BnB,KAAAA,CAAMkB,KAAK,GAAGT,IAAAA,CAAKY,GAAG,EAAA;AAEtB,YAAA,OAAO,IAAI;AACb,QAAA,CAAA;AAEAF,QAAAA,GAAAA,CAAAA,GAAAA;YACEC,MAAAA,CAAOpB,KAAAA,CAAMkB,KAAK,KAAK,IAAA,EAAM,gDAAA,CAAA;YAC7BE,MAAAA,CAAOpB,KAAAA,CAAMmB,GAAG,KAAK,IAAA,EAAM,kCAAA,CAAA;YAE3BnB,KAAAA,CAAMmB,GAAG,GAAGV,IAAAA,CAAKY,GAAG,EAAA;AAEpB,YAAA,OAAO,IAAI;AACb,QAAA,CAAA;AAEA,QAAA,IAAIC,QAAAA,CAAAA,GAAW;YACbF,MAAAA,CAAOpB,KAAAA,CAAMkB,KAAK,KAAK,IAAA,EAAM,gCAAA,CAAA;AAE7B,YAAA,OAAO,CAAC,CAAElB,MAAMmB,GAAG,IAAIV,IAAAA,CAAKY,GAAG,IAAarB,KAAAA,CAAMkB,KAAK,IAAe,IAAA;AACxE,QAAA;AACF,KAAA;AACF;AAEA;;IAGO,MAAMK,UAAAA,GAAa,OAAOC,MAAAA,GAAAA;IAC/B,IAAI;QACF,MAAMC,EAAAA,CAAGC,MAAM,CAACF,MAAAA,CAAAA;QAChB,OAAO,IAAA;AACT,IAAA,CAAA,CAAE,OAAM;QACN,OAAO,KAAA;AACT,IAAA;AACF;;;;"}
@@ -0,0 +1,5 @@
1
+ export { compile } from './compile';
2
+ export * as compilers from './compilers';
3
+ export * as generators from './generators';
4
+ export * from './utils';
5
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,KAAK,SAAS,MAAM,aAAa,CAAC;AACzC,OAAO,KAAK,UAAU,MAAM,cAAc,CAAC;AAC3C,cAAc,SAAS,CAAC"}
package/dist/index.js ADDED
@@ -0,0 +1,28 @@
1
+ 'use strict';
2
+
3
+ var compile = require('./compile.js');
4
+ var index = require('./compilers/index.js');
5
+ var index$1 = require('./generators/index.js');
6
+ var isUsingTypescript = require('./utils/is-using-typescript.js');
7
+ var isUsingTypescriptSync = require('./utils/is-using-typescript-sync.js');
8
+ var getConfigPath = require('./utils/get-config-path.js');
9
+ var reportDiagnostics = require('./utils/report-diagnostics.js');
10
+ var resolveConfigOptions = require('./utils/resolve-config-options.js');
11
+ var formatHost = require('./utils/format-host.js');
12
+ var resolveOutdir = require('./utils/resolve-outdir.js');
13
+ var resolveOutdirSync = require('./utils/resolve-outdir-sync.js');
14
+
15
+
16
+
17
+ exports.compile = compile.compile;
18
+ exports.compilers = index;
19
+ exports.generators = index$1;
20
+ exports.isUsingTypeScript = isUsingTypescript.isUsingTypeScript;
21
+ exports.isUsingTypeScriptSync = isUsingTypescriptSync.isUsingTypeScriptSync;
22
+ exports.getConfigPath = getConfigPath.getConfigPath;
23
+ exports.reportDiagnostics = reportDiagnostics.reportDiagnostics;
24
+ exports.resolveConfigOptions = resolveConfigOptions.resolveConfigOptions;
25
+ exports.formatHost = formatHost.formatHost;
26
+ exports.resolveOutDir = resolveOutdir.resolveOutDir;
27
+ exports.resolveOutDirSync = resolveOutdirSync.resolveOutDirSync;
28
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;"}
package/dist/index.mjs ADDED
@@ -0,0 +1,14 @@
1
+ export { compile } from './compile.mjs';
2
+ import * as index from './compilers/index.mjs';
3
+ export { index as compilers };
4
+ import * as index$1 from './generators/index.mjs';
5
+ export { index$1 as generators };
6
+ export { isUsingTypeScript } from './utils/is-using-typescript.mjs';
7
+ export { isUsingTypeScriptSync } from './utils/is-using-typescript-sync.mjs';
8
+ export { getConfigPath } from './utils/get-config-path.mjs';
9
+ export { reportDiagnostics } from './utils/report-diagnostics.mjs';
10
+ export { resolveConfigOptions } from './utils/resolve-config-options.mjs';
11
+ export { formatHost } from './utils/format-host.mjs';
12
+ export { resolveOutDir } from './utils/resolve-outdir.mjs';
13
+ export { resolveOutDirSync } from './utils/resolve-outdir-sync.mjs';
14
+ //# sourceMappingURL=index.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.mjs","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;"}
@@ -0,0 +1,3 @@
1
+ import * as ts from 'typescript';
2
+ export declare const formatHost: ts.FormatDiagnosticsHost;
3
+ //# sourceMappingURL=format-host.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"format-host.d.ts","sourceRoot":"","sources":["../../src/utils/format-host.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,YAAY,CAAC;AAGjC,eAAO,MAAM,UAAU,EAAE,EAAE,CAAC,qBAI3B,CAAC"}
@@ -0,0 +1,33 @@
1
+ 'use strict';
2
+
3
+ var ts = require('typescript');
4
+ var _ = require('lodash');
5
+
6
+ function _interopNamespace(e) {
7
+ if (e && e.__esModule) return e;
8
+ var n = Object.create(null);
9
+ if (e) {
10
+ Object.keys(e).forEach(function (k) {
11
+ if (k !== 'default') {
12
+ var d = Object.getOwnPropertyDescriptor(e, k);
13
+ Object.defineProperty(n, k, d.get ? d : {
14
+ enumerable: true,
15
+ get: function () { return e[k]; }
16
+ });
17
+ }
18
+ });
19
+ }
20
+ n.default = e;
21
+ return Object.freeze(n);
22
+ }
23
+
24
+ var ts__namespace = /*#__PURE__*/_interopNamespace(ts);
25
+
26
+ const formatHost = {
27
+ getCanonicalFileName: _.identity,
28
+ getCurrentDirectory: ts__namespace.sys.getCurrentDirectory,
29
+ getNewLine: ()=>ts__namespace.sys.newLine
30
+ };
31
+
32
+ exports.formatHost = formatHost;
33
+ //# sourceMappingURL=format-host.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"format-host.js","sources":["../../src/utils/format-host.ts"],"sourcesContent":["import * as ts from 'typescript';\nimport { identity } from 'lodash';\n\nexport const formatHost: ts.FormatDiagnosticsHost = {\n getCanonicalFileName: identity,\n getCurrentDirectory: ts.sys.getCurrentDirectory,\n getNewLine: () => ts.sys.newLine,\n};\n"],"names":["formatHost","getCanonicalFileName","identity","getCurrentDirectory","ts","sys","getNewLine","newLine"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;MAGaA,UAAAA,GAAuC;IAClDC,oBAAAA,EAAsBC,UAAAA;IACtBC,mBAAAA,EAAqBC,aAAAA,CAAGC,GAAG,CAACF,mBAAmB;AAC/CG,IAAAA,UAAAA,EAAY,IAAMF,aAAAA,CAAGC,GAAG,CAACE;AAC3B;;;;"}
@@ -0,0 +1,11 @@
1
+ import * as ts from 'typescript';
2
+ import { identity } from 'lodash';
3
+
4
+ const formatHost = {
5
+ getCanonicalFileName: identity,
6
+ getCurrentDirectory: ts.sys.getCurrentDirectory,
7
+ getNewLine: ()=>ts.sys.newLine
8
+ };
9
+
10
+ export { formatHost };
11
+ //# sourceMappingURL=format-host.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"format-host.mjs","sources":["../../src/utils/format-host.ts"],"sourcesContent":["import * as ts from 'typescript';\nimport { identity } from 'lodash';\n\nexport const formatHost: ts.FormatDiagnosticsHost = {\n getCanonicalFileName: identity,\n getCurrentDirectory: ts.sys.getCurrentDirectory,\n getNewLine: () => ts.sys.newLine,\n};\n"],"names":["formatHost","getCanonicalFileName","identity","getCurrentDirectory","ts","sys","getNewLine","newLine"],"mappings":";;;MAGaA,UAAAA,GAAuC;IAClDC,oBAAAA,EAAsBC,QAAAA;IACtBC,mBAAAA,EAAqBC,EAAAA,CAAGC,GAAG,CAACF,mBAAmB;AAC/CG,IAAAA,UAAAA,EAAY,IAAMF,EAAAA,CAAGC,GAAG,CAACE;AAC3B;;;;"}
@@ -0,0 +1,10 @@
1
+ interface GetConfigPathOptions {
2
+ filename?: string;
3
+ ancestorsLookup?: boolean;
4
+ }
5
+ /**
6
+ * Get the path of the typescript config file for a given directory
7
+ */
8
+ export declare const getConfigPath: (dir: string, { filename, ancestorsLookup }?: GetConfigPathOptions) => string | undefined;
9
+ export {};
10
+ //# sourceMappingURL=get-config-path.d.ts.map