@baeta/generator-sdk 0.1.0 → 0.1.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -1,5 +1,37 @@
1
1
  # @baeta/generator-sdk
2
2
 
3
+ ## 0.1.2
4
+
5
+ ### Patch Changes
6
+
7
+ - [`e3fb6f8`](https://github.com/andreisergiu98/baeta/commit/e3fb6f877b4b20e248ad79cbaa3655cabe973f6b) Thanks [@andreisergiu98](https://github.com/andreisergiu98)! - revert fileblock instead of removing the file
8
+
9
+ - [#170](https://github.com/andreisergiu98/baeta/pull/170) [`59bbb9c`](https://github.com/andreisergiu98/baeta/commit/59bbb9c4baaf716f27dc251fe7aeb0231e6c5321) Thanks [@andreisergiu98](https://github.com/andreisergiu98)! - update dependencies
10
+
11
+ - Updated dependencies [[`59bbb9c`](https://github.com/andreisergiu98/baeta/commit/59bbb9c4baaf716f27dc251fe7aeb0231e6c5321)]:
12
+ - @baeta/plugin@0.1.2
13
+ - @baeta/util-path@0.1.2
14
+
15
+ ## 0.1.1
16
+
17
+ ### Patch Changes
18
+
19
+ - [`7f1958c`](https://github.com/andreisergiu98/baeta/commit/7f1958c44d1b9bed473e48c875fdaa7020c434fa) Thanks [@andreisergiu98](https://github.com/andreisergiu98)! - allow custom extension for generated file imports
20
+
21
+ - [#157](https://github.com/andreisergiu98/baeta/pull/157) [`b9638eb`](https://github.com/andreisergiu98/baeta/commit/b9638eb9fb713507efa9821b4f04cc7896a997b1) Thanks [@andreisergiu98](https://github.com/andreisergiu98)! - stricter linting, better type safety
22
+
23
+ - [`fd3a5d2`](https://github.com/andreisergiu98/baeta/commit/fd3a5d27b497aca4b8807155e801b1c1197c5fe2) Thanks [@andreisergiu98](https://github.com/andreisergiu98)! - handle cloudflare cache in cloudflare plugin
24
+
25
+ - [`9d8d6a1`](https://github.com/andreisergiu98/baeta/commit/9d8d6a15d63579a2e0bdaa07b7efdcf10aff2492) Thanks [@andreisergiu98](https://github.com/andreisergiu98)! - remove all loaders apart from graphql file loader, and let users define extra loaders if needed
26
+
27
+ - [`a3f0e5d`](https://github.com/andreisergiu98/baeta/commit/a3f0e5d03fc9ef21a87d3ec6bf264d0e9707636a) Thanks [@andreisergiu98](https://github.com/andreisergiu98)! - fix exports order in package.json
28
+
29
+ - [#161](https://github.com/andreisergiu98/baeta/pull/161) [`cca37dd`](https://github.com/andreisergiu98/baeta/commit/cca37dd7135a2852f1f6e287c46911306bdc8da0) Thanks [@andreisergiu98](https://github.com/andreisergiu98)! - update dependencies
30
+
31
+ - Updated dependencies [[`a3f0e5d`](https://github.com/andreisergiu98/baeta/commit/a3f0e5d03fc9ef21a87d3ec6bf264d0e9707636a), [`cca37dd`](https://github.com/andreisergiu98/baeta/commit/cca37dd7135a2852f1f6e287c46911306bdc8da0)]:
32
+ - @baeta/plugin@0.1.1
33
+ - @baeta/util-path@0.1.1
34
+
3
35
  ## 0.1.0
4
36
 
5
37
  ### Minor Changes
package/dist/index.cjs CHANGED
@@ -19,7 +19,9 @@ function loadOptions(options) {
19
19
  contextType,
20
20
  extensions,
21
21
  scalars: options.scalars,
22
- fileOptions: options.fileOptions
22
+ fileOptions: options.fileOptions,
23
+ loaders: options.loaders,
24
+ importExtension: options.importExtension
23
25
  };
24
26
  }
25
27
  function resolveContextType(root, baseTypesRoot, contextType) {
@@ -120,9 +122,12 @@ var FileBlock = (_class2 = class extends File {
120
122
  super(filename, content, tag, {
121
123
  addEslintDisableHeader: _nullishCoalesce(_optionalChain([options, 'optionalAccess', _9 => _9.addEslintDisableHeader]), () => ( false)),
122
124
  addGenerationNoticeHeader: _nullishCoalesce(_optionalChain([options, 'optionalAccess', _10 => _10.addGenerationNoticeHeader]), () => ( false))
123
- });_class2.prototype.__init4.call(this);;
125
+ });_class2.prototype.__init4.call(this);_class2.prototype.__init5.call(this);;
126
+ this.filename = filename;
127
+ this.content = content;
124
128
  this.start = start;
125
129
  this.end = end;
130
+ this.tag = tag;
126
131
  }
127
132
  __init4() {this.write = async () => {
128
133
  if (this.persisted) {
@@ -132,15 +137,26 @@ var FileBlock = (_class2 = class extends File {
132
137
  const dir = _utilpath.dirname.call(void 0, this.filename);
133
138
  await _promises.mkdir.call(void 0, dir, { recursive: true });
134
139
  const [existingContent, fd] = await this.getExistingContent();
135
- this.addBlockToContent(existingContent);
140
+ this.content = this.addBlockToContent(existingContent);
136
141
  const content = await this.buildContent();
137
142
  if (fd) {
143
+ await fd.truncate(0);
138
144
  await fd.write(content, 0, "utf-8");
139
145
  await fd.close();
140
146
  } else {
141
147
  await _promises.writeFile.call(void 0, this.filename, content, "utf-8");
142
148
  }
143
149
  }}
150
+ __init5() {this.unlink = async () => {
151
+ this.persisted = false;
152
+ const [existingContent, fd] = await this.getExistingContent();
153
+ if (fd) {
154
+ const [start, end] = this.getSlices(existingContent);
155
+ await fd.truncate(0);
156
+ await fd.write(start + end, 0, "utf-8");
157
+ await fd.close();
158
+ }
159
+ }}
144
160
  async getExistingContent() {
145
161
  try {
146
162
  const fd = await _promises.open.call(void 0, this.filename, "r+");
@@ -152,36 +168,32 @@ var FileBlock = (_class2 = class extends File {
152
168
  }
153
169
  getSlices(existingContent) {
154
170
  const startMarkerIndex = existingContent.indexOf(this.start);
155
- const endMarkerIndex = existingContent.indexOf(this.end);
171
+ const endMarkerIndex = existingContent.lastIndexOf(this.end);
156
172
  if (startMarkerIndex === -1 || endMarkerIndex === -1) {
157
- return [existingContent, ""];
173
+ return [existingContent, "", false];
158
174
  }
159
175
  return [
160
176
  existingContent.slice(0, startMarkerIndex),
161
- existingContent.slice(endMarkerIndex + this.end.length)
177
+ existingContent.slice(endMarkerIndex + this.end.length),
178
+ true
162
179
  ];
163
180
  }
164
181
  addBlockToContent(existingContent) {
165
182
  const block = `${this.start}
166
183
  ${this.content}
167
184
  ${this.end}`;
168
- const padding = this.buildPadding(existingContent);
169
- const [startSlice, endSlice] = this.getSlices(existingContent);
170
- this.content = startSlice + padding + block + endSlice;
171
- }
172
- stripBlock(existingContent) {
173
- const [startSlice, endSlice] = this.getSlices(existingContent);
174
- return startSlice + endSlice;
185
+ const [startSlice, endSlice, hasMarkers] = this.getSlices(existingContent);
186
+ const padding = hasMarkers ? "" : this.buildPadding(existingContent);
187
+ return startSlice + padding + block + endSlice;
175
188
  }
176
189
  buildPadding(existingContent) {
177
- const existingStripped = this.stripBlock(existingContent);
178
- if (existingStripped === "") {
190
+ if (existingContent === "") {
179
191
  return "";
180
192
  }
181
- if (existingStripped.endsWith("\n\n")) {
193
+ if (existingContent.endsWith("\n\n")) {
182
194
  return "";
183
195
  }
184
- if (existingStripped.endsWith("\n")) {
196
+ if (existingContent.endsWith("\n")) {
185
197
  return "\n";
186
198
  }
187
199
  return "\n\n";
@@ -190,10 +202,10 @@ ${this.end}`;
190
202
 
191
203
  // lib/file-manager.ts
192
204
  var FileManager = (_class3 = class {
193
- constructor(fileOptions) {;_class3.prototype.__init5.call(this);
205
+ constructor(fileOptions) {;_class3.prototype.__init6.call(this);
194
206
  this.fileOptions = fileOptions;
195
207
  }
196
- __init5() {this.files = []}
208
+ __init6() {this.files = []}
197
209
  createAndAdd(filename, content, tag) {
198
210
  const file = new File(filename, content, tag, this.fileOptions);
199
211
  this.add(file);
@@ -237,9 +249,6 @@ var FileManager = (_class3 = class {
237
249
  getPersistedFiles() {
238
250
  return this.files.filter((file) => file.persisted);
239
251
  }
240
- getPersistedFileNames() {
241
- return this.getPersistedFiles().map((file) => file.filename);
242
- }
243
252
  }, _class3);
244
253
 
245
254
  // lib/module.ts
@@ -297,14 +306,14 @@ var _micromatch = require('micromatch'); var _micromatch2 = _interopRequireDefau
297
306
 
298
307
 
299
308
  var WatcherIgnore = (_class4 = class {
300
- constructor(cwd) {;_class4.prototype.__init6.call(this);_class4.prototype.__init7.call(this);_class4.prototype.__init8.call(this);_class4.prototype.__init9.call(this);_class4.prototype.__init10.call(this);
309
+ constructor(cwd) {;_class4.prototype.__init7.call(this);_class4.prototype.__init8.call(this);_class4.prototype.__init9.call(this);_class4.prototype.__init10.call(this);_class4.prototype.__init11.call(this);
301
310
  this.cwd = cwd;
302
311
  }
303
- __init6() {this.files = []}
304
- __init7() {this.regexps = []}
305
- __init8() {this.functions = []}
306
- __init9() {this.globs = []}
307
- __init10() {this.globsMap = /* @__PURE__ */ new Map()}
312
+ __init7() {this.files = []}
313
+ __init8() {this.regexps = []}
314
+ __init9() {this.functions = []}
315
+ __init10() {this.globs = []}
316
+ __init11() {this.globsMap = /* @__PURE__ */ new Map()}
308
317
  ignore(pattern) {
309
318
  if (pattern instanceof RegExp) {
310
319
  this.regexps.push(pattern);
@@ -365,20 +374,20 @@ var WatcherIgnore = (_class4 = class {
365
374
  // lib/watcher.ts
366
375
  var isMatch = _micromatch2.default.isMatch;
367
376
  var Watcher = (_class5 = class {
368
- constructor(cwd, options) {;_class5.prototype.__init11.call(this);_class5.prototype.__init12.call(this);
377
+ constructor(cwd, options) {;_class5.prototype.__init12.call(this);_class5.prototype.__init13.call(this);
369
378
  this.cwd = cwd;
370
379
  this.options = options;
371
380
  this.watcherIgnore = new WatcherIgnore(cwd);
372
381
  this.subscription = this.createSubscription();
373
382
  }
374
383
 
375
- __init11() {this.listeners = {
384
+ __init12() {this.listeners = {
376
385
  create: [],
377
386
  update: [],
378
387
  delete: []
379
388
  }}
380
389
 
381
- __init12() {this.onEvents = (err, events) => {
390
+ __init13() {this.onEvents = (err, events) => {
382
391
  if (err) {
383
392
  console.error(err);
384
393
  return;
@@ -1 +1 @@
1
- {"version":3,"sources":["/home/runner/work/baeta/baeta/packages/generator-sdk/dist/index.cjs","../lib/config.ts","../lib/file.ts","../lib/file-block.ts","../lib/file-manager.ts","../lib/module.ts","../lib/plugin.ts","../lib/watcher.ts","../lib/watcher-ignore.ts"],"names":["GeneratorPluginVersion","path","micromatch"],"mappings":"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","file":"/home/runner/work/baeta/baeta/packages/generator-sdk/dist/index.cjs","sourcesContent":[null,"import { isAbsolute, join, posixPath, relative, resolve } from '@baeta/util-path';\nimport type { FileOptions } from './file.ts';\n\n/**\n * Options for the graphql generator.\n */\nexport interface GeneratorOptions {\n\t/**\n\t * Current working directory.\n\t * @default process.cwd()\n\t */\n\tcwd?: string;\n\n\t/**\n\t * Glob pattern(s) to load graphql schema files.\n\t * @default ['src/∗∗/∗.graphql']\n\t */\n\tschemas: string[];\n\n\t/**\n\t * Directory where modules are defined.\n\t * @default 'src/modules'\n\t */\n\tmodulesDir?: string;\n\n\t/**\n\t * Name for the generated module definition file. This will contain type definitions and the graphql ast.\n\t * @default 'typedef.ts'\n\t */\n\tmoduleDefinitionName?: string;\n\n\t/**\n\t * Path for the generated base types file.\n\t * @default `${modulesDir}/../__generated__/types.ts`\n\t */\n\tbaseTypesPath?: string;\n\n\t/**\n\t * Path where the context type is exported.\n\t * @example contextType: 'src/types/context#Context' // for named export\n\t * @example contextType: 'src/types/context' // for default export\n\t * @default undefined\n\t */\n\tcontextType?: string;\n\n\t/**\n\t * Path where extensions (ex. auth-extension) are exported. Only default export is supported.\n\t * @example extensions: 'src/extensions'\n\t * @default undefined\n\t */\n\textensions?: string;\n\n\t/**\n\t * Custom scalar mappings.\n\t * @example scalars: { DateTime: 'Date' }\n\t * @default undefined\n\t */\n\tscalars?: Record<string, string>;\n\n\t/**\n\t * Options for generated files.\n\t */\n\tfileOptions?: FileOptions;\n}\n\nexport interface NormalizedGeneratorOptions {\n\tcwd: string;\n\tschemas: string[];\n\tmodulesDir: string;\n\tmoduleDefinitionName: string;\n\tbaseTypesPath: string;\n\tcontextType?: string;\n\textensions?: string;\n\tscalars?: Record<string, string>;\n\tfileOptions?: FileOptions;\n}\n\nexport function loadOptions(options: GeneratorOptions): NormalizedGeneratorOptions {\n\tconst cwd = posixPath(options.cwd ?? process.cwd());\n\tconst schemas = options.schemas ?? ['src/**/*.graphql'];\n\tconst modulesDir = posixPath(resolve(cwd, options.modulesDir || 'src/modules'));\n\tconst moduleDefinitionName = options.moduleDefinitionName || 'typedef.ts';\n\n\tconst defaultBaseTypesRoot = resolve(modulesDir, '../__generated__/types.ts');\n\tconst baseTypesRoot = resolve(cwd, options.baseTypesPath || defaultBaseTypesRoot);\n\tconst baseTypesPath = posixPath(relative(modulesDir, baseTypesRoot));\n\n\tconst contextType = resolveContextType(cwd, baseTypesRoot, options.contextType);\n\tconst extensions = resolveExtensionPath(modulesDir, moduleDefinitionName, options.extensions);\n\n\treturn {\n\t\tcwd,\n\t\tschemas,\n\t\tmodulesDir,\n\t\tmoduleDefinitionName,\n\t\tbaseTypesPath,\n\t\tcontextType,\n\t\textensions,\n\t\tscalars: options.scalars,\n\t\tfileOptions: options.fileOptions,\n\t};\n}\n\nfunction resolveContextType(root: string, baseTypesRoot: string, contextType?: string) {\n\tif (!contextType) {\n\t\treturn;\n\t}\n\n\tif (isAbsolute(contextType)) {\n\t\treturn contextType;\n\t}\n\n\tif (contextType[0] === '!') {\n\t\treturn contextType.slice(1);\n\t}\n\n\tconst contextTypeRoot = resolve(root, contextType);\n\n\treturn posixPath(relative(join(baseTypesRoot, '../'), contextTypeRoot));\n}\n\nfunction resolveExtensionPath(\n\tmodulesDir: string,\n\tmoduleDefinitionName: string,\n\textensionsPath?: string,\n) {\n\tif (!extensionsPath) {\n\t\treturn;\n\t}\n\n\tif (isAbsolute(extensionsPath)) {\n\t\treturn extensionsPath;\n\t}\n\n\tif (extensionsPath[0] === '!') {\n\t\treturn extensionsPath.slice(1);\n\t}\n\n\treturn posixPath(relative(join(modulesDir, moduleDefinitionName), extensionsPath));\n}\n","import fs from 'node:fs/promises';\nimport { dirname, extname } from '@baeta/util-path';\n\n/**\n * Options for generated files.\n */\nexport interface FileOptions {\n\t/**\n\t * Add generation notice at the beginning of the file.\n\t * @default true\n\t */\n\taddGenerationNoticeHeader?: boolean;\n\n\t/**\n\t * Add eslint-disable comment at the beginning of the file.\n\t * @default true\n\t */\n\taddEslintDisableHeader?: boolean;\n\n\t/**\n\t * Add custom header at the beginning of the file.\n\t */\n\taddHeader?: (name: string, content: string, tag: string) => string;\n\n\t/**\n\t * Edit the content of the file before writing it.\n\t */\n\ttransformContent?: (name: string, content: string, tag: string) => string | Promise<string>;\n}\n\nexport class File {\n\tpersisted = false;\n\n\tconstructor(\n\t\tpublic filename: string,\n\t\tpublic content: string,\n\t\tpublic tag: string,\n\t\tprivate options?: FileOptions,\n\t) {}\n\n\twrite = async () => {\n\t\tif (this.persisted) {\n\t\t\treturn;\n\t\t}\n\t\tthis.persisted = true;\n\n\t\tconst dir = dirname(this.filename);\n\t\tawait fs.mkdir(dir, { recursive: true });\n\n\t\tconst content = await this.buildContent();\n\n\t\treturn fs.writeFile(this.filename, content, 'utf-8');\n\t};\n\n\tunlink = async () => {\n\t\tthis.persisted = false;\n\t\treturn fs.unlink(this.filename);\n\t};\n\n\tprotected async buildContent() {\n\t\tconst content = this.buildHeader() + this.content;\n\n\t\tif (this.options?.transformContent) {\n\t\t\treturn this.options.transformContent(this.filename, content, this.tag);\n\t\t}\n\n\t\treturn content;\n\t}\n\n\tprotected buildHeader() {\n\t\tconst headerItems: string[] = [];\n\n\t\tif (this.options?.addGenerationNoticeHeader !== false) {\n\t\t\tconst comment = this.createComment(\n\t\t\t\t'This file was generated by Baeta. Do not edit it directly. All changes will be overwritten by the generator.',\n\t\t\t);\n\t\t\theaderItems.push(comment);\n\t\t}\n\n\t\tif (this.options?.addEslintDisableHeader !== false) {\n\t\t\tconst comment = this.createComment('eslint-disable');\n\t\t\theaderItems.push(comment);\n\t\t}\n\n\t\tif (this.options?.addHeader) {\n\t\t\tconst customHeader = this.options.addHeader(this.filename, this.content, this.tag);\n\t\t\theaderItems.push(customHeader);\n\t\t}\n\n\t\tif (headerItems.length === 0) {\n\t\t\treturn '';\n\t\t}\n\n\t\treturn `${headerItems.join('\\n')}\\n\\n`;\n\t}\n\n\tprotected createComment(comment: string) {\n\t\tconst extension = extname(this.filename);\n\n\t\tif (['.gql', '.graphql'].includes(extension)) {\n\t\t\treturn `# ${comment}`;\n\t\t}\n\n\t\treturn `/* ${comment} */`;\n\t}\n}\n","import { mkdir, open, writeFile } from 'node:fs/promises';\nimport { dirname } from '@baeta/util-path';\nimport { File, type FileOptions } from './file.ts';\n\nexport class FileBlock extends File {\n\tconstructor(\n\t\tfilename: string,\n\t\tcontent: string,\n\t\tprotected start: string,\n\t\tprotected end: string,\n\t\ttag: string,\n\t\toptions?: FileOptions,\n\t) {\n\t\tsuper(filename, content, tag, {\n\t\t\taddEslintDisableHeader: options?.addEslintDisableHeader ?? false,\n\t\t\taddGenerationNoticeHeader: options?.addGenerationNoticeHeader ?? false,\n\t\t});\n\t}\n\n\twrite = async () => {\n\t\tif (this.persisted) {\n\t\t\treturn;\n\t\t}\n\t\tthis.persisted = true;\n\n\t\tconst dir = dirname(this.filename);\n\t\tawait mkdir(dir, { recursive: true });\n\n\t\tconst [existingContent, fd] = await this.getExistingContent();\n\t\tthis.addBlockToContent(existingContent);\n\t\tconst content = await this.buildContent();\n\n\t\tif (fd) {\n\t\t\tawait fd.write(content, 0, 'utf-8');\n\t\t\tawait fd.close();\n\t\t} else {\n\t\t\tawait writeFile(this.filename, content, 'utf-8');\n\t\t}\n\t};\n\n\tprotected async getExistingContent() {\n\t\ttry {\n\t\t\tconst fd = await open(this.filename, 'r+');\n\t\t\tconst existingContent = await fd.readFile('utf-8');\n\t\t\treturn [existingContent, fd] as const;\n\t\t} catch (err) {\n\t\t\treturn ['', null] as const;\n\t\t}\n\t}\n\n\tprotected getSlices(existingContent: string) {\n\t\tconst startMarkerIndex = existingContent.indexOf(this.start);\n\t\tconst endMarkerIndex = existingContent.indexOf(this.end);\n\n\t\tif (startMarkerIndex === -1 || endMarkerIndex === -1) {\n\t\t\treturn [existingContent, ''] as const;\n\t\t}\n\n\t\treturn [\n\t\t\texistingContent.slice(0, startMarkerIndex),\n\t\t\texistingContent.slice(endMarkerIndex + this.end.length),\n\t\t] as const;\n\t}\n\n\tprotected addBlockToContent(existingContent: string) {\n\t\tconst block = `${this.start}\\n${this.content}\\n${this.end}`;\n\t\tconst padding = this.buildPadding(existingContent);\n\t\tconst [startSlice, endSlice] = this.getSlices(existingContent);\n\t\tthis.content = startSlice + padding + block + endSlice;\n\t}\n\n\tprotected stripBlock(existingContent: string) {\n\t\tconst [startSlice, endSlice] = this.getSlices(existingContent);\n\t\treturn startSlice + endSlice;\n\t}\n\n\tprotected buildPadding(existingContent: string) {\n\t\tconst existingStripped = this.stripBlock(existingContent);\n\n\t\tif (existingStripped === '') {\n\t\t\treturn '';\n\t\t}\n\n\t\tif (existingStripped.endsWith('\\n\\n')) {\n\t\t\treturn '';\n\t\t}\n\n\t\tif (existingStripped.endsWith('\\n')) {\n\t\t\treturn '\\n';\n\t\t}\n\n\t\treturn '\\n\\n';\n\t}\n}\n","import { File, type FileOptions } from './file.ts';\n\nexport class FileManager {\n\tfiles: File[] = [];\n\n\tconstructor(public fileOptions?: FileOptions) {}\n\n\tcreateAndAdd(filename: string, content: string, tag: string) {\n\t\tconst file = new File(filename, content, tag, this.fileOptions);\n\t\tthis.add(file);\n\t\treturn file;\n\t}\n\n\tadd(...file: File[]) {\n\t\tthis.files.push(...file);\n\t}\n\n\tget(filename: string) {\n\t\treturn this.files.find((file) => file.filename === filename);\n\t}\n\n\tgetAll() {\n\t\treturn this.files;\n\t}\n\n\tgetByTag(tag: string) {\n\t\treturn this.files.filter((file) => file.tag === tag);\n\t}\n\n\tremove(filename: string) {\n\t\tconst index = this.files.findIndex((file) => file.filename === filename);\n\t\tthis.files.splice(index, 1);\n\t}\n\n\tremoveAll() {\n\t\tthis.files = [];\n\t}\n\n\tremoveByTag(tag: string) {\n\t\tthis.files = this.files.filter((file) => file.tag !== tag);\n\t}\n\n\twriteAll() {\n\t\tconst toWrite = this.files.filter((file) => !file.persisted);\n\t\treturn Promise.all(toWrite.map((file) => file.write()));\n\t}\n\n\twriteByTag(tag: string) {\n\t\tconst files = this.getByTag(tag);\n\t\tconst toWrite = files.filter((file) => !file.persisted);\n\t\treturn Promise.all(toWrite.map((file) => file.write()));\n\t}\n\n\tunlinkAll() {\n\t\treturn Promise.all(this.files.map((file) => file.unlink())).then(() => {\n\t\t\t// void\n\t\t});\n\t}\n\n\tgetPersistedFiles() {\n\t\treturn this.files.filter((file) => file.persisted);\n\t}\n\n\tgetPersistedFileNames() {\n\t\treturn this.getPersistedFiles().map((file) => file.filename);\n\t}\n}\n","import { camelCase, pascalCase } from 'change-case-all';\n\nexport function getModuleGetName(name: string) {\n\treturn `get${pascalCase(name)}Module`;\n}\n\nexport function getModuleCreateName(name: string) {\n\treturn `create${pascalCase(name)}Module`;\n}\n\nexport function getModuleVariableName(name: string) {\n\treturn camelCase(`${name}Module`);\n}\n","import { PluginType } from '@baeta/plugin';\nimport type { NormalizedGeneratorOptions } from './config.ts';\nimport type { Ctx } from './ctx.ts';\nimport type { Watcher, WatcherFile } from './watcher.ts';\n\nexport enum GeneratorPluginVersion {\n\tV1 = 'v1',\n}\n\nexport type GeneratorPluginV1Fn<Store = unknown> = (\n\tctx: Ctx<Store>,\n\tnext: () => Promise<void>,\n) => Promise<void>;\n\nexport type GeneratorPluginV1ReloadFn = (file: WatcherFile) => void;\n\nexport type GeneratorPluginV1WatchOptions = (\n\toptions: NormalizedGeneratorOptions,\n\twatcher: Watcher,\n\treload: GeneratorPluginV1ReloadFn,\n) => void;\n\nexport type GeneratorPluginV1Factory<Store = unknown> = {\n\tname: string;\n\tactionName: string;\n\tsetup?: GeneratorPluginV1Fn<Store>;\n\tgenerate?: GeneratorPluginV1Fn<Store>;\n\tend?: GeneratorPluginV1Fn<Store>;\n\twatch?: GeneratorPluginV1WatchOptions;\n};\n\nexport interface GeneratorPluginV1<Store = unknown> {\n\tname: string;\n\tactionName: string;\n\tversion: GeneratorPluginVersion.V1;\n\ttype: PluginType.Generator;\n\tsetup: GeneratorPluginV1Fn<Store>;\n\tgenerate: GeneratorPluginV1Fn<Store>;\n\tend: GeneratorPluginV1Fn<Store>;\n\twatch: GeneratorPluginV1WatchOptions;\n}\n\nconst defaultPluginFn: GeneratorPluginV1Fn<unknown> = async (ctx, next) => {\n\treturn next();\n};\n\nconst defaultWatchFn = () => ({ include: [], ignore: [] });\n\nexport function createPluginV1<Store = {}>(\n\toptions: GeneratorPluginV1Factory<Store>,\n): GeneratorPluginV1<Store> {\n\treturn {\n\t\tname: options.name,\n\t\tactionName: options.actionName,\n\t\tversion: GeneratorPluginVersion.V1,\n\t\ttype: PluginType.Generator,\n\t\tend: options.end ?? defaultPluginFn,\n\t\tgenerate: options.generate ?? defaultPluginFn,\n\t\tsetup: options.setup ?? defaultPluginFn,\n\t\twatch: options.watch ?? defaultWatchFn,\n\t};\n}\n\nexport function isGeneratorPlugin(plugin: {\n\ttype: PluginType;\n}): plugin is GeneratorPluginV1<unknown> {\n\treturn plugin.type === PluginType.Generator;\n}\n\nexport function getGeneratorPlugins(plugins?: Array<{ type: PluginType }>) {\n\tif (!plugins) {\n\t\treturn [];\n\t}\n\treturn plugins.filter(isGeneratorPlugin);\n}\n","import path, { posixPath } from '@baeta/util-path';\nimport {\n\ttype AsyncSubscription,\n\ttype Event,\n\ttype EventType,\n\ttype Options,\n\tsubscribe,\n} from '@parcel/watcher';\nimport micromatch from 'micromatch';\nimport { type MatchPattern, WatcherIgnore } from './watcher-ignore.ts';\n\nexport { micromatch };\nexport const isMatch = micromatch.isMatch;\n\nexport type WatcherListener = (path: WatcherFile) => void;\n\nexport interface WatcherFile {\n\ttype: EventType;\n\tpath: string;\n\trelativePath: string;\n}\nexport class Watcher {\n\tprivate subscription: AsyncSubscription;\n\n\tprivate listeners: Record<EventType, WatcherListener[]> = {\n\t\tcreate: [],\n\t\tupdate: [],\n\t\tdelete: [],\n\t};\n\n\tprivate watcherIgnore: WatcherIgnore;\n\n\tconstructor(\n\t\tprivate readonly cwd: string,\n\t\tprivate readonly options?: Options,\n\t) {\n\t\tthis.watcherIgnore = new WatcherIgnore(cwd);\n\t\tthis.subscription = this.createSubscription();\n\t}\n\n\tonEvents = (err: Error | null, events: Event[]) => {\n\t\tif (err) {\n\t\t\tconsole.error(err);\n\t\t\treturn;\n\t\t}\n\n\t\tconst filteredEvents = events.filter((event) => {\n\t\t\treturn !this.watcherIgnore.isIgnored(posixPath(event.path));\n\t\t});\n\n\t\tfor (const event of filteredEvents) {\n\t\t\tfor (const listener of this.listeners[event.type]) {\n\t\t\t\tlistener({\n\t\t\t\t\ttype: event.type,\n\t\t\t\t\tpath: posixPath(event.path),\n\t\t\t\t\trelativePath: posixPath(path.relative(this.cwd, event.path)),\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t};\n\n\ton(event: EventType, listener: WatcherListener) {\n\t\tthis.listeners[event].push(listener);\n\t}\n\n\toff(event: EventType, listener: WatcherListener) {\n\t\tthis.listeners[event] = this.listeners[event].filter((l) => l !== listener);\n\t}\n\n\tignore(pattern: MatchPattern) {\n\t\tthis.watcherIgnore.ignore(pattern);\n\t}\n\n\tunignore(pattern: MatchPattern) {\n\t\tthis.watcherIgnore.unignore(pattern);\n\t}\n\n\tcreateSubscription() {\n\t\tconst promise = subscribe(this.cwd, this.onEvents, this.options);\n\n\t\tconst unsubscribe = async () => {\n\t\t\tconst subscription = await promise;\n\t\t\tawait subscription.unsubscribe();\n\t\t};\n\n\t\treturn {\n\t\t\tunsubscribe,\n\t\t};\n\t}\n\n\tclose() {\n\t\treturn this.subscription.unsubscribe();\n\t}\n}\n","import path from '@baeta/util-path';\nimport micromatch from 'micromatch';\n\nexport type MatchFn = (testString: string) => boolean;\nexport type MatchPattern = string | RegExp | MatchFn;\n\nexport class WatcherIgnore {\n\tprivate files: string[] = [];\n\tprivate regexps: RegExp[] = [];\n\tprivate functions: MatchFn[] = [];\n\n\tprivate globs: MatchFn[] = [];\n\tprivate globsMap = new Map<string, MatchFn>();\n\n\tconstructor(private readonly cwd: string) {}\n\n\tignore(pattern: MatchPattern) {\n\t\tif (pattern instanceof RegExp) {\n\t\t\tthis.regexps.push(pattern);\n\t\t\treturn;\n\t\t}\n\n\t\tif (typeof pattern === 'function') {\n\t\t\tthis.functions.push(pattern);\n\t\t\treturn;\n\t\t}\n\n\t\tif (!this.isMicromatch(pattern)) {\n\t\t\tthis.files.push(this.resolveFile(pattern));\n\t\t\treturn;\n\t\t}\n\n\t\tthis.globsMap.set(pattern, micromatch.matcher(pattern));\n\t\tthis.globs = Array.from(this.globsMap.values());\n\t}\n\n\tisMicromatch(pattern: string) {\n\t\tconst result = micromatch.scan(pattern);\n\t\treturn result.isBrace || result.isGlobstar || result.isExtglob || result.isGlob;\n\t}\n\n\tresolveFile(file: string) {\n\t\treturn path.isAbsolute(file) ? file : path.join(this.cwd, file);\n\t}\n\n\tunignore(pattern: MatchPattern) {\n\t\tif (pattern instanceof RegExp) {\n\t\t\tthis.regexps = this.regexps.filter((p) => p !== pattern);\n\t\t\treturn;\n\t\t}\n\n\t\tif (typeof pattern === 'function') {\n\t\t\tthis.functions = this.functions.filter((p) => p !== pattern);\n\t\t\treturn;\n\t\t}\n\n\t\tif (!this.isMicromatch(pattern)) {\n\t\t\tconst file = this.resolveFile(pattern);\n\t\t\tthis.files = this.files.filter((p) => p !== file);\n\t\t\treturn;\n\t\t}\n\n\t\tthis.globsMap.delete(pattern);\n\t\tthis.globs = Array.from(this.globsMap.values());\n\t}\n\n\tisIgnored(path: string) {\n\t\tif (this.files.includes(path)) {\n\t\t\treturn true;\n\t\t}\n\n\t\tif (this.globs.some((f) => f(path))) {\n\t\t\treturn true;\n\t\t}\n\n\t\tif (this.regexps.some((r) => r.test(path))) {\n\t\t\treturn true;\n\t\t}\n\n\t\tif (this.functions.some((f) => f(path))) {\n\t\t\treturn true;\n\t\t}\n\n\t\treturn false;\n\t}\n}\n"]}
1
+ {"version":3,"sources":["/home/runner/work/baeta/baeta/packages/generator-sdk/dist/index.cjs","../lib/config.ts","../lib/file.ts","../lib/file-block.ts","../lib/file-manager.ts","../lib/module.ts","../lib/plugin.ts","../lib/watcher.ts","../lib/watcher-ignore.ts"],"names":["GeneratorPluginVersion","path","micromatch"],"mappings":"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","file":"/home/runner/work/baeta/baeta/packages/generator-sdk/dist/index.cjs","sourcesContent":[null,"import { isAbsolute, join, posixPath, relative, resolve } from '@baeta/util-path';\nimport type { FileOptions } from './file.ts';\n\n// biome-ignore lint/suspicious/noExplicitAny: We don't want to import graphql for this type\nexport interface Loader<TOptions = any> {\n\t// biome-ignore lint/suspicious/noExplicitAny: Same reason as above\n\tload(pointer: string, options?: TOptions): Promise<any[] | null | never>;\n\t// biome-ignore lint/suspicious/noExplicitAny: Same reason as above\n\tloadSync?(pointer: string, options?: TOptions): any[] | null | never;\n}\n\n/**\n * Options for the graphql generator.\n */\nexport interface GeneratorOptions {\n\t/**\n\t * Current working directory.\n\t * @default process.cwd()\n\t */\n\tcwd?: string;\n\n\t/**\n\t * Glob pattern(s) to load graphql schema files.\n\t * @default ['src/∗∗/∗.graphql']\n\t */\n\tschemas: string[];\n\n\t/**\n\t * Directory where modules are defined.\n\t * @default 'src/modules'\n\t */\n\tmodulesDir?: string;\n\n\t/**\n\t * Name for the generated module definition file. This will contain type definitions and the graphql ast.\n\t * @default 'typedef.ts'\n\t */\n\tmoduleDefinitionName?: string;\n\n\t/**\n\t * Path for the generated base types file.\n\t * @default `${modulesDir}/../__generated__/types.ts`\n\t */\n\tbaseTypesPath?: string;\n\n\t/**\n\t * Path where the context type is exported.\n\t * @example contextType: 'src/types/context#Context' // for named export\n\t * @example contextType: 'src/types/context' // for default export\n\t * @default undefined\n\t */\n\tcontextType?: string;\n\n\t/**\n\t * Path where extensions (ex. auth-extension) are exported. Only default export is supported.\n\t * @example extensions: 'src/extensions'\n\t * @default undefined\n\t */\n\textensions?: string;\n\n\t/**\n\t * Custom scalar mappings.\n\t * @example scalars: { DateTime: 'Date' }\n\t * @default undefined\n\t */\n\tscalars?: Record<string, string>;\n\n\t/**\n\t * Options for generated files.\n\t */\n\tfileOptions?: FileOptions;\n\n\t/**\n\t * Additional schema loaders to be used for \"schemas\" option.\n\t */\n\tloaders?: Loader[];\n\n\t/**\n\t * File extension for generated import statements.\n\t */\n\timportExtension?: '.js' | '.ts';\n}\n\nexport interface NormalizedGeneratorOptions {\n\tcwd: string;\n\tschemas: string[];\n\tmodulesDir: string;\n\tmoduleDefinitionName: string;\n\tbaseTypesPath: string;\n\tcontextType?: string;\n\textensions?: string;\n\tscalars?: Record<string, string>;\n\tfileOptions?: FileOptions;\n\tloaders?: Loader[];\n\timportExtension?: '.js' | '.ts';\n}\n\nexport function loadOptions(options: GeneratorOptions): NormalizedGeneratorOptions {\n\tconst cwd = posixPath(options.cwd ?? process.cwd());\n\tconst schemas = options.schemas ?? ['src/**/*.graphql'];\n\tconst modulesDir = posixPath(resolve(cwd, options.modulesDir || 'src/modules'));\n\tconst moduleDefinitionName = options.moduleDefinitionName || 'typedef.ts';\n\n\tconst defaultBaseTypesRoot = resolve(modulesDir, '../__generated__/types.ts');\n\tconst baseTypesRoot = resolve(cwd, options.baseTypesPath || defaultBaseTypesRoot);\n\tconst baseTypesPath = posixPath(relative(modulesDir, baseTypesRoot));\n\n\tconst contextType = resolveContextType(cwd, baseTypesRoot, options.contextType);\n\tconst extensions = resolveExtensionPath(modulesDir, moduleDefinitionName, options.extensions);\n\n\treturn {\n\t\tcwd,\n\t\tschemas,\n\t\tmodulesDir,\n\t\tmoduleDefinitionName,\n\t\tbaseTypesPath,\n\t\tcontextType,\n\t\textensions,\n\t\tscalars: options.scalars,\n\t\tfileOptions: options.fileOptions,\n\t\tloaders: options.loaders,\n\t\timportExtension: options.importExtension,\n\t};\n}\n\nfunction resolveContextType(root: string, baseTypesRoot: string, contextType?: string) {\n\tif (!contextType) {\n\t\treturn;\n\t}\n\n\tif (isAbsolute(contextType)) {\n\t\treturn contextType;\n\t}\n\n\tif (contextType[0] === '!') {\n\t\treturn contextType.slice(1);\n\t}\n\n\tconst contextTypeRoot = resolve(root, contextType);\n\n\treturn posixPath(relative(join(baseTypesRoot, '../'), contextTypeRoot));\n}\n\nfunction resolveExtensionPath(\n\tmodulesDir: string,\n\tmoduleDefinitionName: string,\n\textensionsPath?: string,\n) {\n\tif (!extensionsPath) {\n\t\treturn;\n\t}\n\n\tif (isAbsolute(extensionsPath)) {\n\t\treturn extensionsPath;\n\t}\n\n\tif (extensionsPath[0] === '!') {\n\t\treturn extensionsPath.slice(1);\n\t}\n\n\treturn posixPath(relative(join(modulesDir, moduleDefinitionName), extensionsPath));\n}\n","import fs from 'node:fs/promises';\nimport { dirname, extname } from '@baeta/util-path';\n\n/**\n * Options for generated files.\n */\nexport interface FileOptions {\n\t/**\n\t * Add generation notice at the beginning of the file.\n\t * @default true\n\t */\n\taddGenerationNoticeHeader?: boolean;\n\n\t/**\n\t * Add eslint-disable comment at the beginning of the file.\n\t * @default true\n\t */\n\taddEslintDisableHeader?: boolean;\n\n\t/**\n\t * Add custom header at the beginning of the file.\n\t */\n\taddHeader?: (name: string, content: string, tag: string) => string;\n\n\t/**\n\t * Edit the content of the file before writing it.\n\t */\n\ttransformContent?: (name: string, content: string, tag: string) => string | Promise<string>;\n}\n\nexport class File {\n\tpersisted = false;\n\n\tconstructor(\n\t\tpublic filename: string,\n\t\tpublic content: string,\n\t\tpublic tag: string,\n\t\tprivate options?: FileOptions,\n\t) {}\n\n\twrite = async () => {\n\t\tif (this.persisted) {\n\t\t\treturn;\n\t\t}\n\t\tthis.persisted = true;\n\n\t\tconst dir = dirname(this.filename);\n\t\tawait fs.mkdir(dir, { recursive: true });\n\n\t\tconst content = await this.buildContent();\n\n\t\treturn fs.writeFile(this.filename, content, 'utf-8');\n\t};\n\n\tunlink = async () => {\n\t\tthis.persisted = false;\n\t\treturn fs.unlink(this.filename);\n\t};\n\n\tprotected async buildContent() {\n\t\tconst content = this.buildHeader() + this.content;\n\n\t\tif (this.options?.transformContent) {\n\t\t\treturn this.options.transformContent(this.filename, content, this.tag);\n\t\t}\n\n\t\treturn content;\n\t}\n\n\tprotected buildHeader() {\n\t\tconst headerItems: string[] = [];\n\n\t\tif (this.options?.addGenerationNoticeHeader !== false) {\n\t\t\tconst comment = this.createComment(\n\t\t\t\t'This file was generated by Baeta. Do not edit it directly. All changes will be overwritten by the generator.',\n\t\t\t);\n\t\t\theaderItems.push(comment);\n\t\t}\n\n\t\tif (this.options?.addEslintDisableHeader !== false) {\n\t\t\tconst comment = this.createComment('eslint-disable');\n\t\t\theaderItems.push(comment);\n\t\t}\n\n\t\tif (this.options?.addHeader) {\n\t\t\tconst customHeader = this.options.addHeader(this.filename, this.content, this.tag);\n\t\t\theaderItems.push(customHeader);\n\t\t}\n\n\t\tif (headerItems.length === 0) {\n\t\t\treturn '';\n\t\t}\n\n\t\treturn `${headerItems.join('\\n')}\\n\\n`;\n\t}\n\n\tprotected createComment(comment: string) {\n\t\tconst extension = extname(this.filename);\n\n\t\tif (['.gql', '.graphql'].includes(extension)) {\n\t\t\treturn `# ${comment}`;\n\t\t}\n\n\t\treturn `/* ${comment} */`;\n\t}\n}\n","import { mkdir, open, writeFile } from 'node:fs/promises';\nimport { dirname } from '@baeta/util-path';\nimport { File, type FileOptions } from './file.ts';\n\nexport class FileBlock extends File {\n\tconstructor(\n\t\tpublic filename: string,\n\t\tpublic content: string,\n\t\tpublic start: string,\n\t\tpublic end: string,\n\t\tpublic tag: string,\n\t\toptions?: FileOptions,\n\t) {\n\t\tsuper(filename, content, tag, {\n\t\t\taddEslintDisableHeader: options?.addEslintDisableHeader ?? false,\n\t\t\taddGenerationNoticeHeader: options?.addGenerationNoticeHeader ?? false,\n\t\t});\n\t}\n\n\twrite = async () => {\n\t\tif (this.persisted) {\n\t\t\treturn;\n\t\t}\n\t\tthis.persisted = true;\n\n\t\tconst dir = dirname(this.filename);\n\t\tawait mkdir(dir, { recursive: true });\n\n\t\tconst [existingContent, fd] = await this.getExistingContent();\n\n\t\tthis.content = this.addBlockToContent(existingContent);\n\t\tconst content = await this.buildContent();\n\n\t\tif (fd) {\n\t\t\tawait fd.truncate(0);\n\t\t\tawait fd.write(content, 0, 'utf-8');\n\t\t\tawait fd.close();\n\t\t} else {\n\t\t\tawait writeFile(this.filename, content, 'utf-8');\n\t\t}\n\t};\n\n\tunlink = async () => {\n\t\tthis.persisted = false;\n\n\t\tconst [existingContent, fd] = await this.getExistingContent();\n\n\t\tif (fd) {\n\t\t\tconst [start, end] = this.getSlices(existingContent);\n\t\t\tawait fd.truncate(0);\n\t\t\tawait fd.write(start + end, 0, 'utf-8');\n\t\t\tawait fd.close();\n\t\t}\n\t};\n\n\tprotected async getExistingContent() {\n\t\ttry {\n\t\t\tconst fd = await open(this.filename, 'r+');\n\t\t\tconst existingContent = await fd.readFile('utf-8');\n\t\t\treturn [existingContent, fd] as const;\n\t\t} catch (err) {\n\t\t\treturn ['', null] as const;\n\t\t}\n\t}\n\n\tprotected getSlices(existingContent: string) {\n\t\tconst startMarkerIndex = existingContent.indexOf(this.start);\n\t\tconst endMarkerIndex = existingContent.lastIndexOf(this.end);\n\n\t\tif (startMarkerIndex === -1 || endMarkerIndex === -1) {\n\t\t\treturn [existingContent, '', false] as const;\n\t\t}\n\n\t\treturn [\n\t\t\texistingContent.slice(0, startMarkerIndex),\n\t\t\texistingContent.slice(endMarkerIndex + this.end.length),\n\t\t\ttrue,\n\t\t] as const;\n\t}\n\n\tprotected addBlockToContent(existingContent: string) {\n\t\tconst block = `${this.start}\\n${this.content}\\n${this.end}`;\n\t\tconst [startSlice, endSlice, hasMarkers] = this.getSlices(existingContent);\n\t\tconst padding = hasMarkers ? '' : this.buildPadding(existingContent);\n\t\treturn startSlice + padding + block + endSlice;\n\t}\n\n\tprotected buildPadding(existingContent: string) {\n\t\tif (existingContent === '') {\n\t\t\treturn '';\n\t\t}\n\n\t\tif (existingContent.endsWith('\\n\\n')) {\n\t\t\treturn '';\n\t\t}\n\n\t\tif (existingContent.endsWith('\\n')) {\n\t\t\treturn '\\n';\n\t\t}\n\n\t\treturn '\\n\\n';\n\t}\n}\n","import { File, type FileOptions } from './file.ts';\n\nexport class FileManager {\n\tfiles: File[] = [];\n\n\tconstructor(public fileOptions?: FileOptions) {}\n\n\tcreateAndAdd(filename: string, content: string, tag: string) {\n\t\tconst file = new File(filename, content, tag, this.fileOptions);\n\t\tthis.add(file);\n\t\treturn file;\n\t}\n\n\tadd(...file: File[]) {\n\t\tthis.files.push(...file);\n\t}\n\n\tget(filename: string) {\n\t\treturn this.files.find((file) => file.filename === filename);\n\t}\n\n\tgetAll() {\n\t\treturn this.files;\n\t}\n\n\tgetByTag(tag: string) {\n\t\treturn this.files.filter((file) => file.tag === tag);\n\t}\n\n\tremove(filename: string) {\n\t\tconst index = this.files.findIndex((file) => file.filename === filename);\n\t\tthis.files.splice(index, 1);\n\t}\n\n\tremoveAll() {\n\t\tthis.files = [];\n\t}\n\n\tremoveByTag(tag: string) {\n\t\tthis.files = this.files.filter((file) => file.tag !== tag);\n\t}\n\n\twriteAll() {\n\t\tconst toWrite = this.files.filter((file) => !file.persisted);\n\t\treturn Promise.all(toWrite.map((file) => file.write()));\n\t}\n\n\twriteByTag(tag: string) {\n\t\tconst files = this.getByTag(tag);\n\t\tconst toWrite = files.filter((file) => !file.persisted);\n\t\treturn Promise.all(toWrite.map((file) => file.write()));\n\t}\n\n\tunlinkAll() {\n\t\treturn Promise.all(this.files.map((file) => file.unlink())).then(() => {\n\t\t\t// void\n\t\t});\n\t}\n\n\tgetPersistedFiles() {\n\t\treturn this.files.filter((file) => file.persisted);\n\t}\n}\n","import { camelCase, pascalCase } from 'change-case-all';\n\nexport function getModuleGetName(name: string) {\n\treturn `get${pascalCase(name)}Module`;\n}\n\nexport function getModuleCreateName(name: string) {\n\treturn `create${pascalCase(name)}Module`;\n}\n\nexport function getModuleVariableName(name: string) {\n\treturn camelCase(`${name}Module`);\n}\n","import { PluginType } from '@baeta/plugin';\nimport type { NormalizedGeneratorOptions } from './config.ts';\nimport type { Ctx } from './ctx.ts';\nimport type { Watcher, WatcherFile } from './watcher.ts';\n\nexport enum GeneratorPluginVersion {\n\tV1 = 'v1',\n}\n\nexport type GeneratorPluginV1Fn<Store = unknown> = (\n\tctx: Ctx<Store>,\n\tnext: () => Promise<void>,\n) => Promise<void>;\n\nexport type GeneratorPluginV1ReloadFn = (file: WatcherFile) => void;\n\nexport type GeneratorPluginV1WatchOptions = (\n\toptions: NormalizedGeneratorOptions,\n\twatcher: Watcher,\n\treload: GeneratorPluginV1ReloadFn,\n) => void;\n\nexport type GeneratorPluginV1Factory<Store = unknown> = {\n\tname: string;\n\tactionName: string;\n\tsetup?: GeneratorPluginV1Fn<Store>;\n\tgenerate?: GeneratorPluginV1Fn<Store>;\n\tend?: GeneratorPluginV1Fn<Store>;\n\twatch?: GeneratorPluginV1WatchOptions;\n};\n\nexport interface GeneratorPluginV1<Store = unknown> {\n\tname: string;\n\tactionName: string;\n\tversion: GeneratorPluginVersion.V1;\n\ttype: PluginType.Generator;\n\tsetup: GeneratorPluginV1Fn<Store>;\n\tgenerate: GeneratorPluginV1Fn<Store>;\n\tend: GeneratorPluginV1Fn<Store>;\n\twatch: GeneratorPluginV1WatchOptions;\n}\n\nconst defaultPluginFn: GeneratorPluginV1Fn<unknown> = async (ctx, next) => {\n\treturn next();\n};\n\nconst defaultWatchFn = () => ({ include: [], ignore: [] });\n\nexport function createPluginV1<Store = unknown>(\n\toptions: GeneratorPluginV1Factory<Store>,\n): GeneratorPluginV1<Store> {\n\treturn {\n\t\tname: options.name,\n\t\tactionName: options.actionName,\n\t\tversion: GeneratorPluginVersion.V1,\n\t\ttype: PluginType.Generator,\n\t\tend: options.end ?? defaultPluginFn,\n\t\tgenerate: options.generate ?? defaultPluginFn,\n\t\tsetup: options.setup ?? defaultPluginFn,\n\t\twatch: options.watch ?? defaultWatchFn,\n\t};\n}\n\nexport function isGeneratorPlugin(plugin: {\n\ttype: PluginType;\n}): plugin is GeneratorPluginV1<unknown> {\n\treturn plugin.type === PluginType.Generator;\n}\n\nexport function getGeneratorPlugins(plugins?: Array<{ type: PluginType }>) {\n\tif (!plugins) {\n\t\treturn [];\n\t}\n\treturn plugins.filter(isGeneratorPlugin);\n}\n","import path, { posixPath } from '@baeta/util-path';\nimport {\n\ttype AsyncSubscription,\n\ttype Event,\n\ttype EventType,\n\ttype Options,\n\tsubscribe,\n} from '@parcel/watcher';\nimport micromatch from 'micromatch';\nimport { type MatchPattern, WatcherIgnore } from './watcher-ignore.ts';\n\nexport { micromatch };\nexport const isMatch = micromatch.isMatch;\n\nexport type WatcherListener = (path: WatcherFile) => void;\n\nexport interface WatcherFile {\n\ttype: EventType;\n\tpath: string;\n\trelativePath: string;\n}\nexport class Watcher {\n\tprivate subscription: AsyncSubscription;\n\n\tprivate listeners: Record<EventType, WatcherListener[]> = {\n\t\tcreate: [],\n\t\tupdate: [],\n\t\tdelete: [],\n\t};\n\n\tprivate watcherIgnore: WatcherIgnore;\n\n\tconstructor(\n\t\tprivate readonly cwd: string,\n\t\tprivate readonly options?: Options,\n\t) {\n\t\tthis.watcherIgnore = new WatcherIgnore(cwd);\n\t\tthis.subscription = this.createSubscription();\n\t}\n\n\tonEvents = (err: Error | null, events: Event[]) => {\n\t\tif (err) {\n\t\t\tconsole.error(err);\n\t\t\treturn;\n\t\t}\n\n\t\tconst filteredEvents = events.filter((event) => {\n\t\t\treturn !this.watcherIgnore.isIgnored(posixPath(event.path));\n\t\t});\n\n\t\tfor (const event of filteredEvents) {\n\t\t\tfor (const listener of this.listeners[event.type]) {\n\t\t\t\tlistener({\n\t\t\t\t\ttype: event.type,\n\t\t\t\t\tpath: posixPath(event.path),\n\t\t\t\t\trelativePath: posixPath(path.relative(this.cwd, event.path)),\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t};\n\n\ton(event: EventType, listener: WatcherListener) {\n\t\tthis.listeners[event].push(listener);\n\t}\n\n\toff(event: EventType, listener: WatcherListener) {\n\t\tthis.listeners[event] = this.listeners[event].filter((l) => l !== listener);\n\t}\n\n\tignore(pattern: MatchPattern) {\n\t\tthis.watcherIgnore.ignore(pattern);\n\t}\n\n\tunignore(pattern: MatchPattern) {\n\t\tthis.watcherIgnore.unignore(pattern);\n\t}\n\n\tcreateSubscription() {\n\t\tconst promise = subscribe(this.cwd, this.onEvents, this.options);\n\n\t\tconst unsubscribe = async () => {\n\t\t\tconst subscription = await promise;\n\t\t\tawait subscription.unsubscribe();\n\t\t};\n\n\t\treturn {\n\t\t\tunsubscribe,\n\t\t};\n\t}\n\n\tclose() {\n\t\treturn this.subscription.unsubscribe();\n\t}\n}\n","import path from '@baeta/util-path';\nimport micromatch from 'micromatch';\n\nexport type MatchFn = (testString: string) => boolean;\nexport type MatchPattern = string | RegExp | MatchFn;\n\nexport class WatcherIgnore {\n\tprivate files: string[] = [];\n\tprivate regexps: RegExp[] = [];\n\tprivate functions: MatchFn[] = [];\n\n\tprivate globs: MatchFn[] = [];\n\tprivate globsMap = new Map<string, MatchFn>();\n\n\tconstructor(private readonly cwd: string) {}\n\n\tignore(pattern: MatchPattern) {\n\t\tif (pattern instanceof RegExp) {\n\t\t\tthis.regexps.push(pattern);\n\t\t\treturn;\n\t\t}\n\n\t\tif (typeof pattern === 'function') {\n\t\t\tthis.functions.push(pattern);\n\t\t\treturn;\n\t\t}\n\n\t\tif (!this.isMicromatch(pattern)) {\n\t\t\tthis.files.push(this.resolveFile(pattern));\n\t\t\treturn;\n\t\t}\n\n\t\tthis.globsMap.set(pattern, micromatch.matcher(pattern));\n\t\tthis.globs = Array.from(this.globsMap.values());\n\t}\n\n\tisMicromatch(pattern: string) {\n\t\tconst result = micromatch.scan(pattern);\n\t\treturn result.isBrace || result.isGlobstar || result.isExtglob || result.isGlob;\n\t}\n\n\tresolveFile(file: string) {\n\t\treturn path.isAbsolute(file) ? file : path.join(this.cwd, file);\n\t}\n\n\tunignore(pattern: MatchPattern) {\n\t\tif (pattern instanceof RegExp) {\n\t\t\tthis.regexps = this.regexps.filter((p) => p !== pattern);\n\t\t\treturn;\n\t\t}\n\n\t\tif (typeof pattern === 'function') {\n\t\t\tthis.functions = this.functions.filter((p) => p !== pattern);\n\t\t\treturn;\n\t\t}\n\n\t\tif (!this.isMicromatch(pattern)) {\n\t\t\tconst file = this.resolveFile(pattern);\n\t\t\tthis.files = this.files.filter((p) => p !== file);\n\t\t\treturn;\n\t\t}\n\n\t\tthis.globsMap.delete(pattern);\n\t\tthis.globs = Array.from(this.globsMap.values());\n\t}\n\n\tisIgnored(path: string) {\n\t\tif (this.files.includes(path)) {\n\t\t\treturn true;\n\t\t}\n\n\t\tif (this.globs.some((f) => f(path))) {\n\t\t\treturn true;\n\t\t}\n\n\t\tif (this.regexps.some((r) => r.test(path))) {\n\t\t\treturn true;\n\t\t}\n\n\t\tif (this.functions.some((f) => f(path))) {\n\t\t\treturn true;\n\t\t}\n\n\t\treturn false;\n\t}\n}\n"]}
package/dist/index.d.cts CHANGED
@@ -41,6 +41,10 @@ declare class File {
41
41
  protected createComment(comment: string): string;
42
42
  }
43
43
 
44
+ interface Loader<TOptions = any> {
45
+ load(pointer: string, options?: TOptions): Promise<any[] | null | never>;
46
+ loadSync?(pointer: string, options?: TOptions): any[] | null | never;
47
+ }
44
48
  /**
45
49
  * Options for the graphql generator.
46
50
  */
@@ -93,6 +97,14 @@ interface GeneratorOptions {
93
97
  * Options for generated files.
94
98
  */
95
99
  fileOptions?: FileOptions;
100
+ /**
101
+ * Additional schema loaders to be used for "schemas" option.
102
+ */
103
+ loaders?: Loader[];
104
+ /**
105
+ * File extension for generated import statements.
106
+ */
107
+ importExtension?: '.js' | '.ts';
96
108
  }
97
109
  interface NormalizedGeneratorOptions {
98
110
  cwd: string;
@@ -104,6 +116,8 @@ interface NormalizedGeneratorOptions {
104
116
  extensions?: string;
105
117
  scalars?: Record<string, string>;
106
118
  fileOptions?: FileOptions;
119
+ loaders?: Loader[];
120
+ importExtension?: '.js' | '.ts';
107
121
  }
108
122
  declare function loadOptions(options: GeneratorOptions): NormalizedGeneratorOptions;
109
123
 
@@ -123,7 +137,6 @@ declare class FileManager {
123
137
  writeByTag(tag: string): Promise<void[]>;
124
138
  unlinkAll(): Promise<void>;
125
139
  getPersistedFiles(): File[];
126
- getPersistedFileNames(): string[];
127
140
  }
128
141
 
129
142
  type MatchFn = (testString: string) => boolean;
@@ -166,14 +179,17 @@ type Ctx<T = unknown> = {
166
179
  } & T;
167
180
 
168
181
  declare class FileBlock extends File {
169
- protected start: string;
170
- protected end: string;
182
+ filename: string;
183
+ content: string;
184
+ start: string;
185
+ end: string;
186
+ tag: string;
171
187
  constructor(filename: string, content: string, start: string, end: string, tag: string, options?: FileOptions);
172
188
  write: () => Promise<void>;
189
+ unlink: () => Promise<void>;
173
190
  protected getExistingContent(): Promise<readonly [string, fs_promises.FileHandle] | readonly ["", null]>;
174
- protected getSlices(existingContent: string): readonly [string, string];
175
- protected addBlockToContent(existingContent: string): void;
176
- protected stripBlock(existingContent: string): string;
191
+ protected getSlices(existingContent: string): readonly [string, "", false] | readonly [string, string, true];
192
+ protected addBlockToContent(existingContent: string): string;
177
193
  protected buildPadding(existingContent: string): "" | "\n" | "\n\n";
178
194
  }
179
195
 
@@ -205,7 +221,7 @@ interface GeneratorPluginV1<Store = unknown> {
205
221
  end: GeneratorPluginV1Fn<Store>;
206
222
  watch: GeneratorPluginV1WatchOptions;
207
223
  }
208
- declare function createPluginV1<Store = {}>(options: GeneratorPluginV1Factory<Store>): GeneratorPluginV1<Store>;
224
+ declare function createPluginV1<Store = unknown>(options: GeneratorPluginV1Factory<Store>): GeneratorPluginV1<Store>;
209
225
  declare function isGeneratorPlugin(plugin: {
210
226
  type: PluginType;
211
227
  }): plugin is GeneratorPluginV1<unknown>;
@@ -213,4 +229,4 @@ declare function getGeneratorPlugins(plugins?: Array<{
213
229
  type: PluginType;
214
230
  }>): GeneratorPluginV1<unknown>[];
215
231
 
216
- export { type Ctx, File, FileBlock, FileManager, type FileOptions, type GeneratorOptions, type GeneratorPluginV1, type GeneratorPluginV1Factory, type GeneratorPluginV1Fn, type GeneratorPluginV1ReloadFn, type GeneratorPluginV1WatchOptions, GeneratorPluginVersion, type NormalizedGeneratorOptions, Watcher, type WatcherFile, type WatcherListener, createPluginV1, getGeneratorPlugins, getModuleCreateName, getModuleGetName, getModuleVariableName, isGeneratorPlugin, isMatch, loadOptions };
232
+ export { type Ctx, File, FileBlock, FileManager, type FileOptions, type GeneratorOptions, type GeneratorPluginV1, type GeneratorPluginV1Factory, type GeneratorPluginV1Fn, type GeneratorPluginV1ReloadFn, type GeneratorPluginV1WatchOptions, GeneratorPluginVersion, type Loader, type NormalizedGeneratorOptions, Watcher, type WatcherFile, type WatcherListener, createPluginV1, getGeneratorPlugins, getModuleCreateName, getModuleGetName, getModuleVariableName, isGeneratorPlugin, isMatch, loadOptions };
package/dist/index.d.ts CHANGED
@@ -41,6 +41,10 @@ declare class File {
41
41
  protected createComment(comment: string): string;
42
42
  }
43
43
 
44
+ interface Loader<TOptions = any> {
45
+ load(pointer: string, options?: TOptions): Promise<any[] | null | never>;
46
+ loadSync?(pointer: string, options?: TOptions): any[] | null | never;
47
+ }
44
48
  /**
45
49
  * Options for the graphql generator.
46
50
  */
@@ -93,6 +97,14 @@ interface GeneratorOptions {
93
97
  * Options for generated files.
94
98
  */
95
99
  fileOptions?: FileOptions;
100
+ /**
101
+ * Additional schema loaders to be used for "schemas" option.
102
+ */
103
+ loaders?: Loader[];
104
+ /**
105
+ * File extension for generated import statements.
106
+ */
107
+ importExtension?: '.js' | '.ts';
96
108
  }
97
109
  interface NormalizedGeneratorOptions {
98
110
  cwd: string;
@@ -104,6 +116,8 @@ interface NormalizedGeneratorOptions {
104
116
  extensions?: string;
105
117
  scalars?: Record<string, string>;
106
118
  fileOptions?: FileOptions;
119
+ loaders?: Loader[];
120
+ importExtension?: '.js' | '.ts';
107
121
  }
108
122
  declare function loadOptions(options: GeneratorOptions): NormalizedGeneratorOptions;
109
123
 
@@ -123,7 +137,6 @@ declare class FileManager {
123
137
  writeByTag(tag: string): Promise<void[]>;
124
138
  unlinkAll(): Promise<void>;
125
139
  getPersistedFiles(): File[];
126
- getPersistedFileNames(): string[];
127
140
  }
128
141
 
129
142
  type MatchFn = (testString: string) => boolean;
@@ -166,14 +179,17 @@ type Ctx<T = unknown> = {
166
179
  } & T;
167
180
 
168
181
  declare class FileBlock extends File {
169
- protected start: string;
170
- protected end: string;
182
+ filename: string;
183
+ content: string;
184
+ start: string;
185
+ end: string;
186
+ tag: string;
171
187
  constructor(filename: string, content: string, start: string, end: string, tag: string, options?: FileOptions);
172
188
  write: () => Promise<void>;
189
+ unlink: () => Promise<void>;
173
190
  protected getExistingContent(): Promise<readonly [string, fs_promises.FileHandle] | readonly ["", null]>;
174
- protected getSlices(existingContent: string): readonly [string, string];
175
- protected addBlockToContent(existingContent: string): void;
176
- protected stripBlock(existingContent: string): string;
191
+ protected getSlices(existingContent: string): readonly [string, "", false] | readonly [string, string, true];
192
+ protected addBlockToContent(existingContent: string): string;
177
193
  protected buildPadding(existingContent: string): "" | "\n" | "\n\n";
178
194
  }
179
195
 
@@ -205,7 +221,7 @@ interface GeneratorPluginV1<Store = unknown> {
205
221
  end: GeneratorPluginV1Fn<Store>;
206
222
  watch: GeneratorPluginV1WatchOptions;
207
223
  }
208
- declare function createPluginV1<Store = {}>(options: GeneratorPluginV1Factory<Store>): GeneratorPluginV1<Store>;
224
+ declare function createPluginV1<Store = unknown>(options: GeneratorPluginV1Factory<Store>): GeneratorPluginV1<Store>;
209
225
  declare function isGeneratorPlugin(plugin: {
210
226
  type: PluginType;
211
227
  }): plugin is GeneratorPluginV1<unknown>;
@@ -213,4 +229,4 @@ declare function getGeneratorPlugins(plugins?: Array<{
213
229
  type: PluginType;
214
230
  }>): GeneratorPluginV1<unknown>[];
215
231
 
216
- export { type Ctx, File, FileBlock, FileManager, type FileOptions, type GeneratorOptions, type GeneratorPluginV1, type GeneratorPluginV1Factory, type GeneratorPluginV1Fn, type GeneratorPluginV1ReloadFn, type GeneratorPluginV1WatchOptions, GeneratorPluginVersion, type NormalizedGeneratorOptions, Watcher, type WatcherFile, type WatcherListener, createPluginV1, getGeneratorPlugins, getModuleCreateName, getModuleGetName, getModuleVariableName, isGeneratorPlugin, isMatch, loadOptions };
232
+ export { type Ctx, File, FileBlock, FileManager, type FileOptions, type GeneratorOptions, type GeneratorPluginV1, type GeneratorPluginV1Factory, type GeneratorPluginV1Fn, type GeneratorPluginV1ReloadFn, type GeneratorPluginV1WatchOptions, GeneratorPluginVersion, type Loader, type NormalizedGeneratorOptions, Watcher, type WatcherFile, type WatcherListener, createPluginV1, getGeneratorPlugins, getModuleCreateName, getModuleGetName, getModuleVariableName, isGeneratorPlugin, isMatch, loadOptions };
package/dist/index.js CHANGED
@@ -19,7 +19,9 @@ function loadOptions(options) {
19
19
  contextType,
20
20
  extensions,
21
21
  scalars: options.scalars,
22
- fileOptions: options.fileOptions
22
+ fileOptions: options.fileOptions,
23
+ loaders: options.loaders,
24
+ importExtension: options.importExtension
23
25
  };
24
26
  }
25
27
  function resolveContextType(root, baseTypesRoot, contextType) {
@@ -121,8 +123,11 @@ var FileBlock = class extends File {
121
123
  addEslintDisableHeader: options?.addEslintDisableHeader ?? false,
122
124
  addGenerationNoticeHeader: options?.addGenerationNoticeHeader ?? false
123
125
  });
126
+ this.filename = filename;
127
+ this.content = content;
124
128
  this.start = start;
125
129
  this.end = end;
130
+ this.tag = tag;
126
131
  }
127
132
  write = async () => {
128
133
  if (this.persisted) {
@@ -132,15 +137,26 @@ var FileBlock = class extends File {
132
137
  const dir = dirname2(this.filename);
133
138
  await mkdir(dir, { recursive: true });
134
139
  const [existingContent, fd] = await this.getExistingContent();
135
- this.addBlockToContent(existingContent);
140
+ this.content = this.addBlockToContent(existingContent);
136
141
  const content = await this.buildContent();
137
142
  if (fd) {
143
+ await fd.truncate(0);
138
144
  await fd.write(content, 0, "utf-8");
139
145
  await fd.close();
140
146
  } else {
141
147
  await writeFile(this.filename, content, "utf-8");
142
148
  }
143
149
  };
150
+ unlink = async () => {
151
+ this.persisted = false;
152
+ const [existingContent, fd] = await this.getExistingContent();
153
+ if (fd) {
154
+ const [start, end] = this.getSlices(existingContent);
155
+ await fd.truncate(0);
156
+ await fd.write(start + end, 0, "utf-8");
157
+ await fd.close();
158
+ }
159
+ };
144
160
  async getExistingContent() {
145
161
  try {
146
162
  const fd = await open(this.filename, "r+");
@@ -152,36 +168,32 @@ var FileBlock = class extends File {
152
168
  }
153
169
  getSlices(existingContent) {
154
170
  const startMarkerIndex = existingContent.indexOf(this.start);
155
- const endMarkerIndex = existingContent.indexOf(this.end);
171
+ const endMarkerIndex = existingContent.lastIndexOf(this.end);
156
172
  if (startMarkerIndex === -1 || endMarkerIndex === -1) {
157
- return [existingContent, ""];
173
+ return [existingContent, "", false];
158
174
  }
159
175
  return [
160
176
  existingContent.slice(0, startMarkerIndex),
161
- existingContent.slice(endMarkerIndex + this.end.length)
177
+ existingContent.slice(endMarkerIndex + this.end.length),
178
+ true
162
179
  ];
163
180
  }
164
181
  addBlockToContent(existingContent) {
165
182
  const block = `${this.start}
166
183
  ${this.content}
167
184
  ${this.end}`;
168
- const padding = this.buildPadding(existingContent);
169
- const [startSlice, endSlice] = this.getSlices(existingContent);
170
- this.content = startSlice + padding + block + endSlice;
171
- }
172
- stripBlock(existingContent) {
173
- const [startSlice, endSlice] = this.getSlices(existingContent);
174
- return startSlice + endSlice;
185
+ const [startSlice, endSlice, hasMarkers] = this.getSlices(existingContent);
186
+ const padding = hasMarkers ? "" : this.buildPadding(existingContent);
187
+ return startSlice + padding + block + endSlice;
175
188
  }
176
189
  buildPadding(existingContent) {
177
- const existingStripped = this.stripBlock(existingContent);
178
- if (existingStripped === "") {
190
+ if (existingContent === "") {
179
191
  return "";
180
192
  }
181
- if (existingStripped.endsWith("\n\n")) {
193
+ if (existingContent.endsWith("\n\n")) {
182
194
  return "";
183
195
  }
184
- if (existingStripped.endsWith("\n")) {
196
+ if (existingContent.endsWith("\n")) {
185
197
  return "\n";
186
198
  }
187
199
  return "\n\n";
@@ -237,9 +249,6 @@ var FileManager = class {
237
249
  getPersistedFiles() {
238
250
  return this.files.filter((file) => file.persisted);
239
251
  }
240
- getPersistedFileNames() {
241
- return this.getPersistedFiles().map((file) => file.filename);
242
- }
243
252
  };
244
253
 
245
254
  // lib/module.ts
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../lib/config.ts","../lib/file.ts","../lib/file-block.ts","../lib/file-manager.ts","../lib/module.ts","../lib/plugin.ts","../lib/watcher.ts","../lib/watcher-ignore.ts"],"sourcesContent":["import { isAbsolute, join, posixPath, relative, resolve } from '@baeta/util-path';\nimport type { FileOptions } from './file.ts';\n\n/**\n * Options for the graphql generator.\n */\nexport interface GeneratorOptions {\n\t/**\n\t * Current working directory.\n\t * @default process.cwd()\n\t */\n\tcwd?: string;\n\n\t/**\n\t * Glob pattern(s) to load graphql schema files.\n\t * @default ['src/∗∗/∗.graphql']\n\t */\n\tschemas: string[];\n\n\t/**\n\t * Directory where modules are defined.\n\t * @default 'src/modules'\n\t */\n\tmodulesDir?: string;\n\n\t/**\n\t * Name for the generated module definition file. This will contain type definitions and the graphql ast.\n\t * @default 'typedef.ts'\n\t */\n\tmoduleDefinitionName?: string;\n\n\t/**\n\t * Path for the generated base types file.\n\t * @default `${modulesDir}/../__generated__/types.ts`\n\t */\n\tbaseTypesPath?: string;\n\n\t/**\n\t * Path where the context type is exported.\n\t * @example contextType: 'src/types/context#Context' // for named export\n\t * @example contextType: 'src/types/context' // for default export\n\t * @default undefined\n\t */\n\tcontextType?: string;\n\n\t/**\n\t * Path where extensions (ex. auth-extension) are exported. Only default export is supported.\n\t * @example extensions: 'src/extensions'\n\t * @default undefined\n\t */\n\textensions?: string;\n\n\t/**\n\t * Custom scalar mappings.\n\t * @example scalars: { DateTime: 'Date' }\n\t * @default undefined\n\t */\n\tscalars?: Record<string, string>;\n\n\t/**\n\t * Options for generated files.\n\t */\n\tfileOptions?: FileOptions;\n}\n\nexport interface NormalizedGeneratorOptions {\n\tcwd: string;\n\tschemas: string[];\n\tmodulesDir: string;\n\tmoduleDefinitionName: string;\n\tbaseTypesPath: string;\n\tcontextType?: string;\n\textensions?: string;\n\tscalars?: Record<string, string>;\n\tfileOptions?: FileOptions;\n}\n\nexport function loadOptions(options: GeneratorOptions): NormalizedGeneratorOptions {\n\tconst cwd = posixPath(options.cwd ?? process.cwd());\n\tconst schemas = options.schemas ?? ['src/**/*.graphql'];\n\tconst modulesDir = posixPath(resolve(cwd, options.modulesDir || 'src/modules'));\n\tconst moduleDefinitionName = options.moduleDefinitionName || 'typedef.ts';\n\n\tconst defaultBaseTypesRoot = resolve(modulesDir, '../__generated__/types.ts');\n\tconst baseTypesRoot = resolve(cwd, options.baseTypesPath || defaultBaseTypesRoot);\n\tconst baseTypesPath = posixPath(relative(modulesDir, baseTypesRoot));\n\n\tconst contextType = resolveContextType(cwd, baseTypesRoot, options.contextType);\n\tconst extensions = resolveExtensionPath(modulesDir, moduleDefinitionName, options.extensions);\n\n\treturn {\n\t\tcwd,\n\t\tschemas,\n\t\tmodulesDir,\n\t\tmoduleDefinitionName,\n\t\tbaseTypesPath,\n\t\tcontextType,\n\t\textensions,\n\t\tscalars: options.scalars,\n\t\tfileOptions: options.fileOptions,\n\t};\n}\n\nfunction resolveContextType(root: string, baseTypesRoot: string, contextType?: string) {\n\tif (!contextType) {\n\t\treturn;\n\t}\n\n\tif (isAbsolute(contextType)) {\n\t\treturn contextType;\n\t}\n\n\tif (contextType[0] === '!') {\n\t\treturn contextType.slice(1);\n\t}\n\n\tconst contextTypeRoot = resolve(root, contextType);\n\n\treturn posixPath(relative(join(baseTypesRoot, '../'), contextTypeRoot));\n}\n\nfunction resolveExtensionPath(\n\tmodulesDir: string,\n\tmoduleDefinitionName: string,\n\textensionsPath?: string,\n) {\n\tif (!extensionsPath) {\n\t\treturn;\n\t}\n\n\tif (isAbsolute(extensionsPath)) {\n\t\treturn extensionsPath;\n\t}\n\n\tif (extensionsPath[0] === '!') {\n\t\treturn extensionsPath.slice(1);\n\t}\n\n\treturn posixPath(relative(join(modulesDir, moduleDefinitionName), extensionsPath));\n}\n","import fs from 'node:fs/promises';\nimport { dirname, extname } from '@baeta/util-path';\n\n/**\n * Options for generated files.\n */\nexport interface FileOptions {\n\t/**\n\t * Add generation notice at the beginning of the file.\n\t * @default true\n\t */\n\taddGenerationNoticeHeader?: boolean;\n\n\t/**\n\t * Add eslint-disable comment at the beginning of the file.\n\t * @default true\n\t */\n\taddEslintDisableHeader?: boolean;\n\n\t/**\n\t * Add custom header at the beginning of the file.\n\t */\n\taddHeader?: (name: string, content: string, tag: string) => string;\n\n\t/**\n\t * Edit the content of the file before writing it.\n\t */\n\ttransformContent?: (name: string, content: string, tag: string) => string | Promise<string>;\n}\n\nexport class File {\n\tpersisted = false;\n\n\tconstructor(\n\t\tpublic filename: string,\n\t\tpublic content: string,\n\t\tpublic tag: string,\n\t\tprivate options?: FileOptions,\n\t) {}\n\n\twrite = async () => {\n\t\tif (this.persisted) {\n\t\t\treturn;\n\t\t}\n\t\tthis.persisted = true;\n\n\t\tconst dir = dirname(this.filename);\n\t\tawait fs.mkdir(dir, { recursive: true });\n\n\t\tconst content = await this.buildContent();\n\n\t\treturn fs.writeFile(this.filename, content, 'utf-8');\n\t};\n\n\tunlink = async () => {\n\t\tthis.persisted = false;\n\t\treturn fs.unlink(this.filename);\n\t};\n\n\tprotected async buildContent() {\n\t\tconst content = this.buildHeader() + this.content;\n\n\t\tif (this.options?.transformContent) {\n\t\t\treturn this.options.transformContent(this.filename, content, this.tag);\n\t\t}\n\n\t\treturn content;\n\t}\n\n\tprotected buildHeader() {\n\t\tconst headerItems: string[] = [];\n\n\t\tif (this.options?.addGenerationNoticeHeader !== false) {\n\t\t\tconst comment = this.createComment(\n\t\t\t\t'This file was generated by Baeta. Do not edit it directly. All changes will be overwritten by the generator.',\n\t\t\t);\n\t\t\theaderItems.push(comment);\n\t\t}\n\n\t\tif (this.options?.addEslintDisableHeader !== false) {\n\t\t\tconst comment = this.createComment('eslint-disable');\n\t\t\theaderItems.push(comment);\n\t\t}\n\n\t\tif (this.options?.addHeader) {\n\t\t\tconst customHeader = this.options.addHeader(this.filename, this.content, this.tag);\n\t\t\theaderItems.push(customHeader);\n\t\t}\n\n\t\tif (headerItems.length === 0) {\n\t\t\treturn '';\n\t\t}\n\n\t\treturn `${headerItems.join('\\n')}\\n\\n`;\n\t}\n\n\tprotected createComment(comment: string) {\n\t\tconst extension = extname(this.filename);\n\n\t\tif (['.gql', '.graphql'].includes(extension)) {\n\t\t\treturn `# ${comment}`;\n\t\t}\n\n\t\treturn `/* ${comment} */`;\n\t}\n}\n","import { mkdir, open, writeFile } from 'node:fs/promises';\nimport { dirname } from '@baeta/util-path';\nimport { File, type FileOptions } from './file.ts';\n\nexport class FileBlock extends File {\n\tconstructor(\n\t\tfilename: string,\n\t\tcontent: string,\n\t\tprotected start: string,\n\t\tprotected end: string,\n\t\ttag: string,\n\t\toptions?: FileOptions,\n\t) {\n\t\tsuper(filename, content, tag, {\n\t\t\taddEslintDisableHeader: options?.addEslintDisableHeader ?? false,\n\t\t\taddGenerationNoticeHeader: options?.addGenerationNoticeHeader ?? false,\n\t\t});\n\t}\n\n\twrite = async () => {\n\t\tif (this.persisted) {\n\t\t\treturn;\n\t\t}\n\t\tthis.persisted = true;\n\n\t\tconst dir = dirname(this.filename);\n\t\tawait mkdir(dir, { recursive: true });\n\n\t\tconst [existingContent, fd] = await this.getExistingContent();\n\t\tthis.addBlockToContent(existingContent);\n\t\tconst content = await this.buildContent();\n\n\t\tif (fd) {\n\t\t\tawait fd.write(content, 0, 'utf-8');\n\t\t\tawait fd.close();\n\t\t} else {\n\t\t\tawait writeFile(this.filename, content, 'utf-8');\n\t\t}\n\t};\n\n\tprotected async getExistingContent() {\n\t\ttry {\n\t\t\tconst fd = await open(this.filename, 'r+');\n\t\t\tconst existingContent = await fd.readFile('utf-8');\n\t\t\treturn [existingContent, fd] as const;\n\t\t} catch (err) {\n\t\t\treturn ['', null] as const;\n\t\t}\n\t}\n\n\tprotected getSlices(existingContent: string) {\n\t\tconst startMarkerIndex = existingContent.indexOf(this.start);\n\t\tconst endMarkerIndex = existingContent.indexOf(this.end);\n\n\t\tif (startMarkerIndex === -1 || endMarkerIndex === -1) {\n\t\t\treturn [existingContent, ''] as const;\n\t\t}\n\n\t\treturn [\n\t\t\texistingContent.slice(0, startMarkerIndex),\n\t\t\texistingContent.slice(endMarkerIndex + this.end.length),\n\t\t] as const;\n\t}\n\n\tprotected addBlockToContent(existingContent: string) {\n\t\tconst block = `${this.start}\\n${this.content}\\n${this.end}`;\n\t\tconst padding = this.buildPadding(existingContent);\n\t\tconst [startSlice, endSlice] = this.getSlices(existingContent);\n\t\tthis.content = startSlice + padding + block + endSlice;\n\t}\n\n\tprotected stripBlock(existingContent: string) {\n\t\tconst [startSlice, endSlice] = this.getSlices(existingContent);\n\t\treturn startSlice + endSlice;\n\t}\n\n\tprotected buildPadding(existingContent: string) {\n\t\tconst existingStripped = this.stripBlock(existingContent);\n\n\t\tif (existingStripped === '') {\n\t\t\treturn '';\n\t\t}\n\n\t\tif (existingStripped.endsWith('\\n\\n')) {\n\t\t\treturn '';\n\t\t}\n\n\t\tif (existingStripped.endsWith('\\n')) {\n\t\t\treturn '\\n';\n\t\t}\n\n\t\treturn '\\n\\n';\n\t}\n}\n","import { File, type FileOptions } from './file.ts';\n\nexport class FileManager {\n\tfiles: File[] = [];\n\n\tconstructor(public fileOptions?: FileOptions) {}\n\n\tcreateAndAdd(filename: string, content: string, tag: string) {\n\t\tconst file = new File(filename, content, tag, this.fileOptions);\n\t\tthis.add(file);\n\t\treturn file;\n\t}\n\n\tadd(...file: File[]) {\n\t\tthis.files.push(...file);\n\t}\n\n\tget(filename: string) {\n\t\treturn this.files.find((file) => file.filename === filename);\n\t}\n\n\tgetAll() {\n\t\treturn this.files;\n\t}\n\n\tgetByTag(tag: string) {\n\t\treturn this.files.filter((file) => file.tag === tag);\n\t}\n\n\tremove(filename: string) {\n\t\tconst index = this.files.findIndex((file) => file.filename === filename);\n\t\tthis.files.splice(index, 1);\n\t}\n\n\tremoveAll() {\n\t\tthis.files = [];\n\t}\n\n\tremoveByTag(tag: string) {\n\t\tthis.files = this.files.filter((file) => file.tag !== tag);\n\t}\n\n\twriteAll() {\n\t\tconst toWrite = this.files.filter((file) => !file.persisted);\n\t\treturn Promise.all(toWrite.map((file) => file.write()));\n\t}\n\n\twriteByTag(tag: string) {\n\t\tconst files = this.getByTag(tag);\n\t\tconst toWrite = files.filter((file) => !file.persisted);\n\t\treturn Promise.all(toWrite.map((file) => file.write()));\n\t}\n\n\tunlinkAll() {\n\t\treturn Promise.all(this.files.map((file) => file.unlink())).then(() => {\n\t\t\t// void\n\t\t});\n\t}\n\n\tgetPersistedFiles() {\n\t\treturn this.files.filter((file) => file.persisted);\n\t}\n\n\tgetPersistedFileNames() {\n\t\treturn this.getPersistedFiles().map((file) => file.filename);\n\t}\n}\n","import { camelCase, pascalCase } from 'change-case-all';\n\nexport function getModuleGetName(name: string) {\n\treturn `get${pascalCase(name)}Module`;\n}\n\nexport function getModuleCreateName(name: string) {\n\treturn `create${pascalCase(name)}Module`;\n}\n\nexport function getModuleVariableName(name: string) {\n\treturn camelCase(`${name}Module`);\n}\n","import { PluginType } from '@baeta/plugin';\nimport type { NormalizedGeneratorOptions } from './config.ts';\nimport type { Ctx } from './ctx.ts';\nimport type { Watcher, WatcherFile } from './watcher.ts';\n\nexport enum GeneratorPluginVersion {\n\tV1 = 'v1',\n}\n\nexport type GeneratorPluginV1Fn<Store = unknown> = (\n\tctx: Ctx<Store>,\n\tnext: () => Promise<void>,\n) => Promise<void>;\n\nexport type GeneratorPluginV1ReloadFn = (file: WatcherFile) => void;\n\nexport type GeneratorPluginV1WatchOptions = (\n\toptions: NormalizedGeneratorOptions,\n\twatcher: Watcher,\n\treload: GeneratorPluginV1ReloadFn,\n) => void;\n\nexport type GeneratorPluginV1Factory<Store = unknown> = {\n\tname: string;\n\tactionName: string;\n\tsetup?: GeneratorPluginV1Fn<Store>;\n\tgenerate?: GeneratorPluginV1Fn<Store>;\n\tend?: GeneratorPluginV1Fn<Store>;\n\twatch?: GeneratorPluginV1WatchOptions;\n};\n\nexport interface GeneratorPluginV1<Store = unknown> {\n\tname: string;\n\tactionName: string;\n\tversion: GeneratorPluginVersion.V1;\n\ttype: PluginType.Generator;\n\tsetup: GeneratorPluginV1Fn<Store>;\n\tgenerate: GeneratorPluginV1Fn<Store>;\n\tend: GeneratorPluginV1Fn<Store>;\n\twatch: GeneratorPluginV1WatchOptions;\n}\n\nconst defaultPluginFn: GeneratorPluginV1Fn<unknown> = async (ctx, next) => {\n\treturn next();\n};\n\nconst defaultWatchFn = () => ({ include: [], ignore: [] });\n\nexport function createPluginV1<Store = {}>(\n\toptions: GeneratorPluginV1Factory<Store>,\n): GeneratorPluginV1<Store> {\n\treturn {\n\t\tname: options.name,\n\t\tactionName: options.actionName,\n\t\tversion: GeneratorPluginVersion.V1,\n\t\ttype: PluginType.Generator,\n\t\tend: options.end ?? defaultPluginFn,\n\t\tgenerate: options.generate ?? defaultPluginFn,\n\t\tsetup: options.setup ?? defaultPluginFn,\n\t\twatch: options.watch ?? defaultWatchFn,\n\t};\n}\n\nexport function isGeneratorPlugin(plugin: {\n\ttype: PluginType;\n}): plugin is GeneratorPluginV1<unknown> {\n\treturn plugin.type === PluginType.Generator;\n}\n\nexport function getGeneratorPlugins(plugins?: Array<{ type: PluginType }>) {\n\tif (!plugins) {\n\t\treturn [];\n\t}\n\treturn plugins.filter(isGeneratorPlugin);\n}\n","import path, { posixPath } from '@baeta/util-path';\nimport {\n\ttype AsyncSubscription,\n\ttype Event,\n\ttype EventType,\n\ttype Options,\n\tsubscribe,\n} from '@parcel/watcher';\nimport micromatch from 'micromatch';\nimport { type MatchPattern, WatcherIgnore } from './watcher-ignore.ts';\n\nexport { micromatch };\nexport const isMatch = micromatch.isMatch;\n\nexport type WatcherListener = (path: WatcherFile) => void;\n\nexport interface WatcherFile {\n\ttype: EventType;\n\tpath: string;\n\trelativePath: string;\n}\nexport class Watcher {\n\tprivate subscription: AsyncSubscription;\n\n\tprivate listeners: Record<EventType, WatcherListener[]> = {\n\t\tcreate: [],\n\t\tupdate: [],\n\t\tdelete: [],\n\t};\n\n\tprivate watcherIgnore: WatcherIgnore;\n\n\tconstructor(\n\t\tprivate readonly cwd: string,\n\t\tprivate readonly options?: Options,\n\t) {\n\t\tthis.watcherIgnore = new WatcherIgnore(cwd);\n\t\tthis.subscription = this.createSubscription();\n\t}\n\n\tonEvents = (err: Error | null, events: Event[]) => {\n\t\tif (err) {\n\t\t\tconsole.error(err);\n\t\t\treturn;\n\t\t}\n\n\t\tconst filteredEvents = events.filter((event) => {\n\t\t\treturn !this.watcherIgnore.isIgnored(posixPath(event.path));\n\t\t});\n\n\t\tfor (const event of filteredEvents) {\n\t\t\tfor (const listener of this.listeners[event.type]) {\n\t\t\t\tlistener({\n\t\t\t\t\ttype: event.type,\n\t\t\t\t\tpath: posixPath(event.path),\n\t\t\t\t\trelativePath: posixPath(path.relative(this.cwd, event.path)),\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t};\n\n\ton(event: EventType, listener: WatcherListener) {\n\t\tthis.listeners[event].push(listener);\n\t}\n\n\toff(event: EventType, listener: WatcherListener) {\n\t\tthis.listeners[event] = this.listeners[event].filter((l) => l !== listener);\n\t}\n\n\tignore(pattern: MatchPattern) {\n\t\tthis.watcherIgnore.ignore(pattern);\n\t}\n\n\tunignore(pattern: MatchPattern) {\n\t\tthis.watcherIgnore.unignore(pattern);\n\t}\n\n\tcreateSubscription() {\n\t\tconst promise = subscribe(this.cwd, this.onEvents, this.options);\n\n\t\tconst unsubscribe = async () => {\n\t\t\tconst subscription = await promise;\n\t\t\tawait subscription.unsubscribe();\n\t\t};\n\n\t\treturn {\n\t\t\tunsubscribe,\n\t\t};\n\t}\n\n\tclose() {\n\t\treturn this.subscription.unsubscribe();\n\t}\n}\n","import path from '@baeta/util-path';\nimport micromatch from 'micromatch';\n\nexport type MatchFn = (testString: string) => boolean;\nexport type MatchPattern = string | RegExp | MatchFn;\n\nexport class WatcherIgnore {\n\tprivate files: string[] = [];\n\tprivate regexps: RegExp[] = [];\n\tprivate functions: MatchFn[] = [];\n\n\tprivate globs: MatchFn[] = [];\n\tprivate globsMap = new Map<string, MatchFn>();\n\n\tconstructor(private readonly cwd: string) {}\n\n\tignore(pattern: MatchPattern) {\n\t\tif (pattern instanceof RegExp) {\n\t\t\tthis.regexps.push(pattern);\n\t\t\treturn;\n\t\t}\n\n\t\tif (typeof pattern === 'function') {\n\t\t\tthis.functions.push(pattern);\n\t\t\treturn;\n\t\t}\n\n\t\tif (!this.isMicromatch(pattern)) {\n\t\t\tthis.files.push(this.resolveFile(pattern));\n\t\t\treturn;\n\t\t}\n\n\t\tthis.globsMap.set(pattern, micromatch.matcher(pattern));\n\t\tthis.globs = Array.from(this.globsMap.values());\n\t}\n\n\tisMicromatch(pattern: string) {\n\t\tconst result = micromatch.scan(pattern);\n\t\treturn result.isBrace || result.isGlobstar || result.isExtglob || result.isGlob;\n\t}\n\n\tresolveFile(file: string) {\n\t\treturn path.isAbsolute(file) ? file : path.join(this.cwd, file);\n\t}\n\n\tunignore(pattern: MatchPattern) {\n\t\tif (pattern instanceof RegExp) {\n\t\t\tthis.regexps = this.regexps.filter((p) => p !== pattern);\n\t\t\treturn;\n\t\t}\n\n\t\tif (typeof pattern === 'function') {\n\t\t\tthis.functions = this.functions.filter((p) => p !== pattern);\n\t\t\treturn;\n\t\t}\n\n\t\tif (!this.isMicromatch(pattern)) {\n\t\t\tconst file = this.resolveFile(pattern);\n\t\t\tthis.files = this.files.filter((p) => p !== file);\n\t\t\treturn;\n\t\t}\n\n\t\tthis.globsMap.delete(pattern);\n\t\tthis.globs = Array.from(this.globsMap.values());\n\t}\n\n\tisIgnored(path: string) {\n\t\tif (this.files.includes(path)) {\n\t\t\treturn true;\n\t\t}\n\n\t\tif (this.globs.some((f) => f(path))) {\n\t\t\treturn true;\n\t\t}\n\n\t\tif (this.regexps.some((r) => r.test(path))) {\n\t\t\treturn true;\n\t\t}\n\n\t\tif (this.functions.some((f) => f(path))) {\n\t\t\treturn true;\n\t\t}\n\n\t\treturn false;\n\t}\n}\n"],"mappings":"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","names":["dirname","dirname","GeneratorPluginVersion","path","posixPath","micromatch","path","micromatch","posixPath","path"]}
1
+ {"version":3,"sources":["../lib/config.ts","../lib/file.ts","../lib/file-block.ts","../lib/file-manager.ts","../lib/module.ts","../lib/plugin.ts","../lib/watcher.ts","../lib/watcher-ignore.ts"],"sourcesContent":["import { isAbsolute, join, posixPath, relative, resolve } from '@baeta/util-path';\nimport type { FileOptions } from './file.ts';\n\n// biome-ignore lint/suspicious/noExplicitAny: We don't want to import graphql for this type\nexport interface Loader<TOptions = any> {\n\t// biome-ignore lint/suspicious/noExplicitAny: Same reason as above\n\tload(pointer: string, options?: TOptions): Promise<any[] | null | never>;\n\t// biome-ignore lint/suspicious/noExplicitAny: Same reason as above\n\tloadSync?(pointer: string, options?: TOptions): any[] | null | never;\n}\n\n/**\n * Options for the graphql generator.\n */\nexport interface GeneratorOptions {\n\t/**\n\t * Current working directory.\n\t * @default process.cwd()\n\t */\n\tcwd?: string;\n\n\t/**\n\t * Glob pattern(s) to load graphql schema files.\n\t * @default ['src/∗∗/∗.graphql']\n\t */\n\tschemas: string[];\n\n\t/**\n\t * Directory where modules are defined.\n\t * @default 'src/modules'\n\t */\n\tmodulesDir?: string;\n\n\t/**\n\t * Name for the generated module definition file. This will contain type definitions and the graphql ast.\n\t * @default 'typedef.ts'\n\t */\n\tmoduleDefinitionName?: string;\n\n\t/**\n\t * Path for the generated base types file.\n\t * @default `${modulesDir}/../__generated__/types.ts`\n\t */\n\tbaseTypesPath?: string;\n\n\t/**\n\t * Path where the context type is exported.\n\t * @example contextType: 'src/types/context#Context' // for named export\n\t * @example contextType: 'src/types/context' // for default export\n\t * @default undefined\n\t */\n\tcontextType?: string;\n\n\t/**\n\t * Path where extensions (ex. auth-extension) are exported. Only default export is supported.\n\t * @example extensions: 'src/extensions'\n\t * @default undefined\n\t */\n\textensions?: string;\n\n\t/**\n\t * Custom scalar mappings.\n\t * @example scalars: { DateTime: 'Date' }\n\t * @default undefined\n\t */\n\tscalars?: Record<string, string>;\n\n\t/**\n\t * Options for generated files.\n\t */\n\tfileOptions?: FileOptions;\n\n\t/**\n\t * Additional schema loaders to be used for \"schemas\" option.\n\t */\n\tloaders?: Loader[];\n\n\t/**\n\t * File extension for generated import statements.\n\t */\n\timportExtension?: '.js' | '.ts';\n}\n\nexport interface NormalizedGeneratorOptions {\n\tcwd: string;\n\tschemas: string[];\n\tmodulesDir: string;\n\tmoduleDefinitionName: string;\n\tbaseTypesPath: string;\n\tcontextType?: string;\n\textensions?: string;\n\tscalars?: Record<string, string>;\n\tfileOptions?: FileOptions;\n\tloaders?: Loader[];\n\timportExtension?: '.js' | '.ts';\n}\n\nexport function loadOptions(options: GeneratorOptions): NormalizedGeneratorOptions {\n\tconst cwd = posixPath(options.cwd ?? process.cwd());\n\tconst schemas = options.schemas ?? ['src/**/*.graphql'];\n\tconst modulesDir = posixPath(resolve(cwd, options.modulesDir || 'src/modules'));\n\tconst moduleDefinitionName = options.moduleDefinitionName || 'typedef.ts';\n\n\tconst defaultBaseTypesRoot = resolve(modulesDir, '../__generated__/types.ts');\n\tconst baseTypesRoot = resolve(cwd, options.baseTypesPath || defaultBaseTypesRoot);\n\tconst baseTypesPath = posixPath(relative(modulesDir, baseTypesRoot));\n\n\tconst contextType = resolveContextType(cwd, baseTypesRoot, options.contextType);\n\tconst extensions = resolveExtensionPath(modulesDir, moduleDefinitionName, options.extensions);\n\n\treturn {\n\t\tcwd,\n\t\tschemas,\n\t\tmodulesDir,\n\t\tmoduleDefinitionName,\n\t\tbaseTypesPath,\n\t\tcontextType,\n\t\textensions,\n\t\tscalars: options.scalars,\n\t\tfileOptions: options.fileOptions,\n\t\tloaders: options.loaders,\n\t\timportExtension: options.importExtension,\n\t};\n}\n\nfunction resolveContextType(root: string, baseTypesRoot: string, contextType?: string) {\n\tif (!contextType) {\n\t\treturn;\n\t}\n\n\tif (isAbsolute(contextType)) {\n\t\treturn contextType;\n\t}\n\n\tif (contextType[0] === '!') {\n\t\treturn contextType.slice(1);\n\t}\n\n\tconst contextTypeRoot = resolve(root, contextType);\n\n\treturn posixPath(relative(join(baseTypesRoot, '../'), contextTypeRoot));\n}\n\nfunction resolveExtensionPath(\n\tmodulesDir: string,\n\tmoduleDefinitionName: string,\n\textensionsPath?: string,\n) {\n\tif (!extensionsPath) {\n\t\treturn;\n\t}\n\n\tif (isAbsolute(extensionsPath)) {\n\t\treturn extensionsPath;\n\t}\n\n\tif (extensionsPath[0] === '!') {\n\t\treturn extensionsPath.slice(1);\n\t}\n\n\treturn posixPath(relative(join(modulesDir, moduleDefinitionName), extensionsPath));\n}\n","import fs from 'node:fs/promises';\nimport { dirname, extname } from '@baeta/util-path';\n\n/**\n * Options for generated files.\n */\nexport interface FileOptions {\n\t/**\n\t * Add generation notice at the beginning of the file.\n\t * @default true\n\t */\n\taddGenerationNoticeHeader?: boolean;\n\n\t/**\n\t * Add eslint-disable comment at the beginning of the file.\n\t * @default true\n\t */\n\taddEslintDisableHeader?: boolean;\n\n\t/**\n\t * Add custom header at the beginning of the file.\n\t */\n\taddHeader?: (name: string, content: string, tag: string) => string;\n\n\t/**\n\t * Edit the content of the file before writing it.\n\t */\n\ttransformContent?: (name: string, content: string, tag: string) => string | Promise<string>;\n}\n\nexport class File {\n\tpersisted = false;\n\n\tconstructor(\n\t\tpublic filename: string,\n\t\tpublic content: string,\n\t\tpublic tag: string,\n\t\tprivate options?: FileOptions,\n\t) {}\n\n\twrite = async () => {\n\t\tif (this.persisted) {\n\t\t\treturn;\n\t\t}\n\t\tthis.persisted = true;\n\n\t\tconst dir = dirname(this.filename);\n\t\tawait fs.mkdir(dir, { recursive: true });\n\n\t\tconst content = await this.buildContent();\n\n\t\treturn fs.writeFile(this.filename, content, 'utf-8');\n\t};\n\n\tunlink = async () => {\n\t\tthis.persisted = false;\n\t\treturn fs.unlink(this.filename);\n\t};\n\n\tprotected async buildContent() {\n\t\tconst content = this.buildHeader() + this.content;\n\n\t\tif (this.options?.transformContent) {\n\t\t\treturn this.options.transformContent(this.filename, content, this.tag);\n\t\t}\n\n\t\treturn content;\n\t}\n\n\tprotected buildHeader() {\n\t\tconst headerItems: string[] = [];\n\n\t\tif (this.options?.addGenerationNoticeHeader !== false) {\n\t\t\tconst comment = this.createComment(\n\t\t\t\t'This file was generated by Baeta. Do not edit it directly. All changes will be overwritten by the generator.',\n\t\t\t);\n\t\t\theaderItems.push(comment);\n\t\t}\n\n\t\tif (this.options?.addEslintDisableHeader !== false) {\n\t\t\tconst comment = this.createComment('eslint-disable');\n\t\t\theaderItems.push(comment);\n\t\t}\n\n\t\tif (this.options?.addHeader) {\n\t\t\tconst customHeader = this.options.addHeader(this.filename, this.content, this.tag);\n\t\t\theaderItems.push(customHeader);\n\t\t}\n\n\t\tif (headerItems.length === 0) {\n\t\t\treturn '';\n\t\t}\n\n\t\treturn `${headerItems.join('\\n')}\\n\\n`;\n\t}\n\n\tprotected createComment(comment: string) {\n\t\tconst extension = extname(this.filename);\n\n\t\tif (['.gql', '.graphql'].includes(extension)) {\n\t\t\treturn `# ${comment}`;\n\t\t}\n\n\t\treturn `/* ${comment} */`;\n\t}\n}\n","import { mkdir, open, writeFile } from 'node:fs/promises';\nimport { dirname } from '@baeta/util-path';\nimport { File, type FileOptions } from './file.ts';\n\nexport class FileBlock extends File {\n\tconstructor(\n\t\tpublic filename: string,\n\t\tpublic content: string,\n\t\tpublic start: string,\n\t\tpublic end: string,\n\t\tpublic tag: string,\n\t\toptions?: FileOptions,\n\t) {\n\t\tsuper(filename, content, tag, {\n\t\t\taddEslintDisableHeader: options?.addEslintDisableHeader ?? false,\n\t\t\taddGenerationNoticeHeader: options?.addGenerationNoticeHeader ?? false,\n\t\t});\n\t}\n\n\twrite = async () => {\n\t\tif (this.persisted) {\n\t\t\treturn;\n\t\t}\n\t\tthis.persisted = true;\n\n\t\tconst dir = dirname(this.filename);\n\t\tawait mkdir(dir, { recursive: true });\n\n\t\tconst [existingContent, fd] = await this.getExistingContent();\n\n\t\tthis.content = this.addBlockToContent(existingContent);\n\t\tconst content = await this.buildContent();\n\n\t\tif (fd) {\n\t\t\tawait fd.truncate(0);\n\t\t\tawait fd.write(content, 0, 'utf-8');\n\t\t\tawait fd.close();\n\t\t} else {\n\t\t\tawait writeFile(this.filename, content, 'utf-8');\n\t\t}\n\t};\n\n\tunlink = async () => {\n\t\tthis.persisted = false;\n\n\t\tconst [existingContent, fd] = await this.getExistingContent();\n\n\t\tif (fd) {\n\t\t\tconst [start, end] = this.getSlices(existingContent);\n\t\t\tawait fd.truncate(0);\n\t\t\tawait fd.write(start + end, 0, 'utf-8');\n\t\t\tawait fd.close();\n\t\t}\n\t};\n\n\tprotected async getExistingContent() {\n\t\ttry {\n\t\t\tconst fd = await open(this.filename, 'r+');\n\t\t\tconst existingContent = await fd.readFile('utf-8');\n\t\t\treturn [existingContent, fd] as const;\n\t\t} catch (err) {\n\t\t\treturn ['', null] as const;\n\t\t}\n\t}\n\n\tprotected getSlices(existingContent: string) {\n\t\tconst startMarkerIndex = existingContent.indexOf(this.start);\n\t\tconst endMarkerIndex = existingContent.lastIndexOf(this.end);\n\n\t\tif (startMarkerIndex === -1 || endMarkerIndex === -1) {\n\t\t\treturn [existingContent, '', false] as const;\n\t\t}\n\n\t\treturn [\n\t\t\texistingContent.slice(0, startMarkerIndex),\n\t\t\texistingContent.slice(endMarkerIndex + this.end.length),\n\t\t\ttrue,\n\t\t] as const;\n\t}\n\n\tprotected addBlockToContent(existingContent: string) {\n\t\tconst block = `${this.start}\\n${this.content}\\n${this.end}`;\n\t\tconst [startSlice, endSlice, hasMarkers] = this.getSlices(existingContent);\n\t\tconst padding = hasMarkers ? '' : this.buildPadding(existingContent);\n\t\treturn startSlice + padding + block + endSlice;\n\t}\n\n\tprotected buildPadding(existingContent: string) {\n\t\tif (existingContent === '') {\n\t\t\treturn '';\n\t\t}\n\n\t\tif (existingContent.endsWith('\\n\\n')) {\n\t\t\treturn '';\n\t\t}\n\n\t\tif (existingContent.endsWith('\\n')) {\n\t\t\treturn '\\n';\n\t\t}\n\n\t\treturn '\\n\\n';\n\t}\n}\n","import { File, type FileOptions } from './file.ts';\n\nexport class FileManager {\n\tfiles: File[] = [];\n\n\tconstructor(public fileOptions?: FileOptions) {}\n\n\tcreateAndAdd(filename: string, content: string, tag: string) {\n\t\tconst file = new File(filename, content, tag, this.fileOptions);\n\t\tthis.add(file);\n\t\treturn file;\n\t}\n\n\tadd(...file: File[]) {\n\t\tthis.files.push(...file);\n\t}\n\n\tget(filename: string) {\n\t\treturn this.files.find((file) => file.filename === filename);\n\t}\n\n\tgetAll() {\n\t\treturn this.files;\n\t}\n\n\tgetByTag(tag: string) {\n\t\treturn this.files.filter((file) => file.tag === tag);\n\t}\n\n\tremove(filename: string) {\n\t\tconst index = this.files.findIndex((file) => file.filename === filename);\n\t\tthis.files.splice(index, 1);\n\t}\n\n\tremoveAll() {\n\t\tthis.files = [];\n\t}\n\n\tremoveByTag(tag: string) {\n\t\tthis.files = this.files.filter((file) => file.tag !== tag);\n\t}\n\n\twriteAll() {\n\t\tconst toWrite = this.files.filter((file) => !file.persisted);\n\t\treturn Promise.all(toWrite.map((file) => file.write()));\n\t}\n\n\twriteByTag(tag: string) {\n\t\tconst files = this.getByTag(tag);\n\t\tconst toWrite = files.filter((file) => !file.persisted);\n\t\treturn Promise.all(toWrite.map((file) => file.write()));\n\t}\n\n\tunlinkAll() {\n\t\treturn Promise.all(this.files.map((file) => file.unlink())).then(() => {\n\t\t\t// void\n\t\t});\n\t}\n\n\tgetPersistedFiles() {\n\t\treturn this.files.filter((file) => file.persisted);\n\t}\n}\n","import { camelCase, pascalCase } from 'change-case-all';\n\nexport function getModuleGetName(name: string) {\n\treturn `get${pascalCase(name)}Module`;\n}\n\nexport function getModuleCreateName(name: string) {\n\treturn `create${pascalCase(name)}Module`;\n}\n\nexport function getModuleVariableName(name: string) {\n\treturn camelCase(`${name}Module`);\n}\n","import { PluginType } from '@baeta/plugin';\nimport type { NormalizedGeneratorOptions } from './config.ts';\nimport type { Ctx } from './ctx.ts';\nimport type { Watcher, WatcherFile } from './watcher.ts';\n\nexport enum GeneratorPluginVersion {\n\tV1 = 'v1',\n}\n\nexport type GeneratorPluginV1Fn<Store = unknown> = (\n\tctx: Ctx<Store>,\n\tnext: () => Promise<void>,\n) => Promise<void>;\n\nexport type GeneratorPluginV1ReloadFn = (file: WatcherFile) => void;\n\nexport type GeneratorPluginV1WatchOptions = (\n\toptions: NormalizedGeneratorOptions,\n\twatcher: Watcher,\n\treload: GeneratorPluginV1ReloadFn,\n) => void;\n\nexport type GeneratorPluginV1Factory<Store = unknown> = {\n\tname: string;\n\tactionName: string;\n\tsetup?: GeneratorPluginV1Fn<Store>;\n\tgenerate?: GeneratorPluginV1Fn<Store>;\n\tend?: GeneratorPluginV1Fn<Store>;\n\twatch?: GeneratorPluginV1WatchOptions;\n};\n\nexport interface GeneratorPluginV1<Store = unknown> {\n\tname: string;\n\tactionName: string;\n\tversion: GeneratorPluginVersion.V1;\n\ttype: PluginType.Generator;\n\tsetup: GeneratorPluginV1Fn<Store>;\n\tgenerate: GeneratorPluginV1Fn<Store>;\n\tend: GeneratorPluginV1Fn<Store>;\n\twatch: GeneratorPluginV1WatchOptions;\n}\n\nconst defaultPluginFn: GeneratorPluginV1Fn<unknown> = async (ctx, next) => {\n\treturn next();\n};\n\nconst defaultWatchFn = () => ({ include: [], ignore: [] });\n\nexport function createPluginV1<Store = unknown>(\n\toptions: GeneratorPluginV1Factory<Store>,\n): GeneratorPluginV1<Store> {\n\treturn {\n\t\tname: options.name,\n\t\tactionName: options.actionName,\n\t\tversion: GeneratorPluginVersion.V1,\n\t\ttype: PluginType.Generator,\n\t\tend: options.end ?? defaultPluginFn,\n\t\tgenerate: options.generate ?? defaultPluginFn,\n\t\tsetup: options.setup ?? defaultPluginFn,\n\t\twatch: options.watch ?? defaultWatchFn,\n\t};\n}\n\nexport function isGeneratorPlugin(plugin: {\n\ttype: PluginType;\n}): plugin is GeneratorPluginV1<unknown> {\n\treturn plugin.type === PluginType.Generator;\n}\n\nexport function getGeneratorPlugins(plugins?: Array<{ type: PluginType }>) {\n\tif (!plugins) {\n\t\treturn [];\n\t}\n\treturn plugins.filter(isGeneratorPlugin);\n}\n","import path, { posixPath } from '@baeta/util-path';\nimport {\n\ttype AsyncSubscription,\n\ttype Event,\n\ttype EventType,\n\ttype Options,\n\tsubscribe,\n} from '@parcel/watcher';\nimport micromatch from 'micromatch';\nimport { type MatchPattern, WatcherIgnore } from './watcher-ignore.ts';\n\nexport { micromatch };\nexport const isMatch = micromatch.isMatch;\n\nexport type WatcherListener = (path: WatcherFile) => void;\n\nexport interface WatcherFile {\n\ttype: EventType;\n\tpath: string;\n\trelativePath: string;\n}\nexport class Watcher {\n\tprivate subscription: AsyncSubscription;\n\n\tprivate listeners: Record<EventType, WatcherListener[]> = {\n\t\tcreate: [],\n\t\tupdate: [],\n\t\tdelete: [],\n\t};\n\n\tprivate watcherIgnore: WatcherIgnore;\n\n\tconstructor(\n\t\tprivate readonly cwd: string,\n\t\tprivate readonly options?: Options,\n\t) {\n\t\tthis.watcherIgnore = new WatcherIgnore(cwd);\n\t\tthis.subscription = this.createSubscription();\n\t}\n\n\tonEvents = (err: Error | null, events: Event[]) => {\n\t\tif (err) {\n\t\t\tconsole.error(err);\n\t\t\treturn;\n\t\t}\n\n\t\tconst filteredEvents = events.filter((event) => {\n\t\t\treturn !this.watcherIgnore.isIgnored(posixPath(event.path));\n\t\t});\n\n\t\tfor (const event of filteredEvents) {\n\t\t\tfor (const listener of this.listeners[event.type]) {\n\t\t\t\tlistener({\n\t\t\t\t\ttype: event.type,\n\t\t\t\t\tpath: posixPath(event.path),\n\t\t\t\t\trelativePath: posixPath(path.relative(this.cwd, event.path)),\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t};\n\n\ton(event: EventType, listener: WatcherListener) {\n\t\tthis.listeners[event].push(listener);\n\t}\n\n\toff(event: EventType, listener: WatcherListener) {\n\t\tthis.listeners[event] = this.listeners[event].filter((l) => l !== listener);\n\t}\n\n\tignore(pattern: MatchPattern) {\n\t\tthis.watcherIgnore.ignore(pattern);\n\t}\n\n\tunignore(pattern: MatchPattern) {\n\t\tthis.watcherIgnore.unignore(pattern);\n\t}\n\n\tcreateSubscription() {\n\t\tconst promise = subscribe(this.cwd, this.onEvents, this.options);\n\n\t\tconst unsubscribe = async () => {\n\t\t\tconst subscription = await promise;\n\t\t\tawait subscription.unsubscribe();\n\t\t};\n\n\t\treturn {\n\t\t\tunsubscribe,\n\t\t};\n\t}\n\n\tclose() {\n\t\treturn this.subscription.unsubscribe();\n\t}\n}\n","import path from '@baeta/util-path';\nimport micromatch from 'micromatch';\n\nexport type MatchFn = (testString: string) => boolean;\nexport type MatchPattern = string | RegExp | MatchFn;\n\nexport class WatcherIgnore {\n\tprivate files: string[] = [];\n\tprivate regexps: RegExp[] = [];\n\tprivate functions: MatchFn[] = [];\n\n\tprivate globs: MatchFn[] = [];\n\tprivate globsMap = new Map<string, MatchFn>();\n\n\tconstructor(private readonly cwd: string) {}\n\n\tignore(pattern: MatchPattern) {\n\t\tif (pattern instanceof RegExp) {\n\t\t\tthis.regexps.push(pattern);\n\t\t\treturn;\n\t\t}\n\n\t\tif (typeof pattern === 'function') {\n\t\t\tthis.functions.push(pattern);\n\t\t\treturn;\n\t\t}\n\n\t\tif (!this.isMicromatch(pattern)) {\n\t\t\tthis.files.push(this.resolveFile(pattern));\n\t\t\treturn;\n\t\t}\n\n\t\tthis.globsMap.set(pattern, micromatch.matcher(pattern));\n\t\tthis.globs = Array.from(this.globsMap.values());\n\t}\n\n\tisMicromatch(pattern: string) {\n\t\tconst result = micromatch.scan(pattern);\n\t\treturn result.isBrace || result.isGlobstar || result.isExtglob || result.isGlob;\n\t}\n\n\tresolveFile(file: string) {\n\t\treturn path.isAbsolute(file) ? file : path.join(this.cwd, file);\n\t}\n\n\tunignore(pattern: MatchPattern) {\n\t\tif (pattern instanceof RegExp) {\n\t\t\tthis.regexps = this.regexps.filter((p) => p !== pattern);\n\t\t\treturn;\n\t\t}\n\n\t\tif (typeof pattern === 'function') {\n\t\t\tthis.functions = this.functions.filter((p) => p !== pattern);\n\t\t\treturn;\n\t\t}\n\n\t\tif (!this.isMicromatch(pattern)) {\n\t\t\tconst file = this.resolveFile(pattern);\n\t\t\tthis.files = this.files.filter((p) => p !== file);\n\t\t\treturn;\n\t\t}\n\n\t\tthis.globsMap.delete(pattern);\n\t\tthis.globs = Array.from(this.globsMap.values());\n\t}\n\n\tisIgnored(path: string) {\n\t\tif (this.files.includes(path)) {\n\t\t\treturn true;\n\t\t}\n\n\t\tif (this.globs.some((f) => f(path))) {\n\t\t\treturn true;\n\t\t}\n\n\t\tif (this.regexps.some((r) => r.test(path))) {\n\t\t\treturn true;\n\t\t}\n\n\t\tif (this.functions.some((f) => f(path))) {\n\t\t\treturn true;\n\t\t}\n\n\t\treturn false;\n\t}\n}\n"],"mappings":"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","names":["dirname","dirname","GeneratorPluginVersion","path","posixPath","micromatch","path","micromatch","posixPath","path"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@baeta/generator-sdk",
3
- "version": "0.1.0",
3
+ "version": "0.1.2",
4
4
  "keywords": [
5
5
  "baeta",
6
6
  "graphql",
@@ -27,9 +27,9 @@
27
27
  "type": "module",
28
28
  "exports": {
29
29
  ".": {
30
+ "types": "./dist/index.d.ts",
30
31
  "import": "./dist/index.js",
31
- "require": "./dist/index.cjs",
32
- "types": "./dist/index.d.ts"
32
+ "require": "./dist/index.cjs"
33
33
  }
34
34
  },
35
35
  "types": "dist/index.d.ts",
@@ -44,9 +44,9 @@
44
44
  "types": "tsc --noEmit"
45
45
  },
46
46
  "dependencies": {
47
- "@baeta/plugin": "^0.1.0",
48
- "@baeta/util-path": "^0.1.0",
49
- "@parcel/watcher": "^2.4.1",
47
+ "@baeta/plugin": "^0.1.2",
48
+ "@baeta/util-path": "^0.1.2",
49
+ "@parcel/watcher": "^2.5.0",
50
50
  "change-case-all": "2.1.0",
51
51
  "micromatch": "^4.0.8"
52
52
  },
@@ -54,14 +54,21 @@
54
54
  "@baeta/builder": "^0.0.0",
55
55
  "@baeta/tsconfig": "^0.0.0",
56
56
  "@types/micromatch": "^4.0.9",
57
- "@types/node": "^22.7.4",
58
- "typescript": "^5.6.2"
57
+ "@types/node": "^22.9.1",
58
+ "typescript": "^5.6.3"
59
59
  },
60
60
  "engines": {
61
61
  "node": ">=22.0.0"
62
62
  },
63
63
  "publishConfig": {
64
- "access": "public"
64
+ "access": "public",
65
+ "exports": {
66
+ ".": {
67
+ "types": "./dist/index.d.ts",
68
+ "import": "./dist/index.js",
69
+ "require": "./dist/index.cjs"
70
+ }
71
+ }
65
72
  },
66
73
  "ava": {
67
74
  "extensions": {