@baeta/generator-sdk 0.0.14 → 0.1.1
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 +36 -0
- package/dist/index.cjs +18 -17
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +18 -5
- package/dist/index.d.ts +18 -5
- package/dist/index.js +20 -19
- package/dist/index.js.map +1 -1
- package/package.json +19 -10
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,41 @@
|
|
|
1
1
|
# @baeta/generator-sdk
|
|
2
2
|
|
|
3
|
+
## 0.1.1
|
|
4
|
+
|
|
5
|
+
### Patch Changes
|
|
6
|
+
|
|
7
|
+
- [`7f1958c`](https://github.com/andreisergiu98/baeta/commit/7f1958c44d1b9bed473e48c875fdaa7020c434fa) Thanks [@andreisergiu98](https://github.com/andreisergiu98)! - allow custom extension for generated file imports
|
|
8
|
+
|
|
9
|
+
- [#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
|
|
10
|
+
|
|
11
|
+
- [`fd3a5d2`](https://github.com/andreisergiu98/baeta/commit/fd3a5d27b497aca4b8807155e801b1c1197c5fe2) Thanks [@andreisergiu98](https://github.com/andreisergiu98)! - handle cloudflare cache in cloudflare plugin
|
|
12
|
+
|
|
13
|
+
- [`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
|
|
14
|
+
|
|
15
|
+
- [`a3f0e5d`](https://github.com/andreisergiu98/baeta/commit/a3f0e5d03fc9ef21a87d3ec6bf264d0e9707636a) Thanks [@andreisergiu98](https://github.com/andreisergiu98)! - fix exports order in package.json
|
|
16
|
+
|
|
17
|
+
- [#161](https://github.com/andreisergiu98/baeta/pull/161) [`cca37dd`](https://github.com/andreisergiu98/baeta/commit/cca37dd7135a2852f1f6e287c46911306bdc8da0) Thanks [@andreisergiu98](https://github.com/andreisergiu98)! - update dependencies
|
|
18
|
+
|
|
19
|
+
- Updated dependencies [[`a3f0e5d`](https://github.com/andreisergiu98/baeta/commit/a3f0e5d03fc9ef21a87d3ec6bf264d0e9707636a), [`cca37dd`](https://github.com/andreisergiu98/baeta/commit/cca37dd7135a2852f1f6e287c46911306bdc8da0)]:
|
|
20
|
+
- @baeta/plugin@0.1.1
|
|
21
|
+
- @baeta/util-path@0.1.1
|
|
22
|
+
|
|
23
|
+
## 0.1.0
|
|
24
|
+
|
|
25
|
+
### Minor Changes
|
|
26
|
+
|
|
27
|
+
- [#156](https://github.com/andreisergiu98/baeta/pull/156) [`01f3c20`](https://github.com/andreisergiu98/baeta/commit/01f3c20365539fad6e8a8694c59a8e86c95784e8) Thanks [@andreisergiu98](https://github.com/andreisergiu98)! - raise engine requirement to node >= 22
|
|
28
|
+
|
|
29
|
+
### Patch Changes
|
|
30
|
+
|
|
31
|
+
- [#152](https://github.com/andreisergiu98/baeta/pull/152) [`d538c79`](https://github.com/andreisergiu98/baeta/commit/d538c7905e6ba96d9f294e2d528f9252e83acbe7) Thanks [@andreisergiu98](https://github.com/andreisergiu98)! - update formatter
|
|
32
|
+
|
|
33
|
+
- [#145](https://github.com/andreisergiu98/baeta/pull/145) [`08428d4`](https://github.com/andreisergiu98/baeta/commit/08428d4f03b79cab9c116ff7b3a3cf9a0b2620f2) Thanks [@andreisergiu98](https://github.com/andreisergiu98)! - update dependencies
|
|
34
|
+
|
|
35
|
+
- Updated dependencies [[`01f3c20`](https://github.com/andreisergiu98/baeta/commit/01f3c20365539fad6e8a8694c59a8e86c95784e8), [`d538c79`](https://github.com/andreisergiu98/baeta/commit/d538c7905e6ba96d9f294e2d528f9252e83acbe7), [`08428d4`](https://github.com/andreisergiu98/baeta/commit/08428d4f03b79cab9c116ff7b3a3cf9a0b2620f2)]:
|
|
36
|
+
- @baeta/plugin@0.1.0
|
|
37
|
+
- @baeta/util-path@0.1.0
|
|
38
|
+
|
|
3
39
|
## 0.0.14
|
|
4
40
|
|
|
5
41
|
### Patch 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) {
|
|
@@ -49,8 +51,8 @@ function resolveExtensionPath(modulesDir, moduleDefinitionName, extensionsPath)
|
|
|
49
51
|
}
|
|
50
52
|
|
|
51
53
|
// lib/file.ts
|
|
52
|
-
|
|
53
54
|
var _promises = require('fs/promises'); var _promises2 = _interopRequireDefault(_promises);
|
|
55
|
+
|
|
54
56
|
var File = (_class = class {
|
|
55
57
|
constructor(filename, content, tag, options) {;_class.prototype.__init.call(this);_class.prototype.__init2.call(this);_class.prototype.__init3.call(this);
|
|
56
58
|
this.filename = filename;
|
|
@@ -132,9 +134,10 @@ var FileBlock = (_class2 = class extends File {
|
|
|
132
134
|
const dir = _utilpath.dirname.call(void 0, this.filename);
|
|
133
135
|
await _promises.mkdir.call(void 0, dir, { recursive: true });
|
|
134
136
|
const [existingContent, fd] = await this.getExistingContent();
|
|
135
|
-
this.addBlockToContent(existingContent);
|
|
137
|
+
this.content = this.addBlockToContent(existingContent);
|
|
136
138
|
const content = await this.buildContent();
|
|
137
139
|
if (fd) {
|
|
140
|
+
await fd.truncate(0);
|
|
138
141
|
await fd.write(content, 0, "utf-8");
|
|
139
142
|
await fd.close();
|
|
140
143
|
} else {
|
|
@@ -152,36 +155,32 @@ var FileBlock = (_class2 = class extends File {
|
|
|
152
155
|
}
|
|
153
156
|
getSlices(existingContent) {
|
|
154
157
|
const startMarkerIndex = existingContent.indexOf(this.start);
|
|
155
|
-
const endMarkerIndex = existingContent.
|
|
158
|
+
const endMarkerIndex = existingContent.lastIndexOf(this.end);
|
|
156
159
|
if (startMarkerIndex === -1 || endMarkerIndex === -1) {
|
|
157
|
-
return [existingContent, ""];
|
|
160
|
+
return [existingContent, "", false];
|
|
158
161
|
}
|
|
159
162
|
return [
|
|
160
163
|
existingContent.slice(0, startMarkerIndex),
|
|
161
|
-
existingContent.slice(endMarkerIndex + this.end.length)
|
|
164
|
+
existingContent.slice(endMarkerIndex + this.end.length),
|
|
165
|
+
true
|
|
162
166
|
];
|
|
163
167
|
}
|
|
164
168
|
addBlockToContent(existingContent) {
|
|
165
169
|
const block = `${this.start}
|
|
166
170
|
${this.content}
|
|
167
171
|
${this.end}`;
|
|
168
|
-
const
|
|
169
|
-
const
|
|
170
|
-
|
|
171
|
-
}
|
|
172
|
-
stripBlock(existingContent) {
|
|
173
|
-
const [startSlice, endSlice] = this.getSlices(existingContent);
|
|
174
|
-
return startSlice + endSlice;
|
|
172
|
+
const [startSlice, endSlice, hasMarkers] = this.getSlices(existingContent);
|
|
173
|
+
const padding = hasMarkers ? "" : this.buildPadding(existingContent);
|
|
174
|
+
return startSlice + padding + block + endSlice;
|
|
175
175
|
}
|
|
176
176
|
buildPadding(existingContent) {
|
|
177
|
-
|
|
178
|
-
if (existingStripped === "") {
|
|
177
|
+
if (existingContent === "") {
|
|
179
178
|
return "";
|
|
180
179
|
}
|
|
181
|
-
if (
|
|
180
|
+
if (existingContent.endsWith("\n\n")) {
|
|
182
181
|
return "";
|
|
183
182
|
}
|
|
184
|
-
if (
|
|
183
|
+
if (existingContent.endsWith("\n")) {
|
|
185
184
|
return "\n";
|
|
186
185
|
}
|
|
187
186
|
return "\n\n";
|
|
@@ -288,6 +287,8 @@ function getGeneratorPlugins(plugins) {
|
|
|
288
287
|
|
|
289
288
|
// lib/watcher.ts
|
|
290
289
|
|
|
290
|
+
|
|
291
|
+
|
|
291
292
|
var _watcher = require('@parcel/watcher');
|
|
292
293
|
var _micromatch = require('micromatch'); var _micromatch2 = _interopRequireDefault(_micromatch);
|
|
293
294
|
|
package/dist/index.cjs.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"],"names":["dirname","GeneratorPluginVersion","path","posixPath","micromatch"],"mappings":"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","sourcesContent":["import { isAbsolute, join, posixPath, relative, resolve } from '@baeta/util-path';\nimport { FileOptions } from './file';\n\n/**\n * Options for the graphql generator.\n */\nexport interface GeneratorOptions {\n /**\n * Current working directory.\n * @default process.cwd()\n */\n cwd?: string;\n\n /**\n * Glob pattern(s) to load graphql schema files.\n * @default ['src/∗∗/∗.graphql']\n */\n schemas: string[];\n\n /**\n * Directory where modules are defined.\n * @default 'src/modules'\n */\n modulesDir?: string;\n\n /**\n * Name for the generated module definition file. This will contain type definitions and the graphql ast.\n * @default 'typedef.ts'\n */\n moduleDefinitionName?: string;\n\n /**\n * Path for the generated base types file.\n * @default `${modulesDir}/../__generated__/types.ts`\n */\n baseTypesPath?: string;\n\n /**\n * Path where the context type is exported.\n * @example contextType: 'src/types/context#Context' // for named export\n * @example contextType: 'src/types/context' // for default export\n * @default undefined\n */\n contextType?: string;\n\n /**\n * Path where extensions (ex. auth-extension) are exported. Only default export is supported.\n * @example extensions: 'src/extensions'\n * @default undefined\n */\n extensions?: string;\n\n /**\n * Custom scalar mappings.\n * @example scalars: { DateTime: 'Date' }\n * @default undefined\n */\n scalars?: Record<string, string>;\n\n /**\n * Options for generated files.\n */\n fileOptions?: FileOptions;\n}\n\nexport interface NormalizedGeneratorOptions {\n cwd: string;\n schemas: string[];\n modulesDir: string;\n moduleDefinitionName: string;\n baseTypesPath: string;\n contextType?: string;\n extensions?: string;\n scalars?: Record<string, string>;\n fileOptions?: FileOptions;\n}\n\nexport function loadOptions(options: GeneratorOptions): NormalizedGeneratorOptions {\n const cwd = posixPath(options.cwd ?? process.cwd());\n const schemas = options.schemas ?? ['src/**/*.graphql'];\n const modulesDir = posixPath(resolve(cwd, options.modulesDir || 'src/modules'));\n const moduleDefinitionName = options.moduleDefinitionName || 'typedef.ts';\n\n const defaultBaseTypesRoot = resolve(modulesDir, '../__generated__/types.ts');\n const baseTypesRoot = resolve(cwd, options.baseTypesPath || defaultBaseTypesRoot);\n const baseTypesPath = posixPath(relative(modulesDir, baseTypesRoot));\n\n const contextType = resolveContextType(cwd, baseTypesRoot, options.contextType);\n const extensions = resolveExtensionPath(modulesDir, moduleDefinitionName, options.extensions);\n\n return {\n cwd,\n schemas,\n modulesDir,\n moduleDefinitionName,\n baseTypesPath,\n contextType,\n extensions,\n scalars: options.scalars,\n fileOptions: options.fileOptions,\n };\n}\n\nfunction resolveContextType(root: string, baseTypesRoot: string, contextType?: string) {\n if (!contextType) {\n return;\n }\n\n if (isAbsolute(contextType)) {\n return contextType;\n }\n\n if (contextType[0] === '!') {\n return contextType.slice(1);\n }\n\n const contextTypeRoot = resolve(root, contextType);\n\n return posixPath(relative(join(baseTypesRoot, '../'), contextTypeRoot));\n}\n\nfunction resolveExtensionPath(\n modulesDir: string,\n moduleDefinitionName: string,\n extensionsPath?: string,\n) {\n if (!extensionsPath) {\n return;\n }\n\n if (isAbsolute(extensionsPath)) {\n return extensionsPath;\n }\n\n if (extensionsPath[0] === '!') {\n return extensionsPath.slice(1);\n }\n\n return posixPath(relative(join(modulesDir, moduleDefinitionName), extensionsPath));\n}\n","import { dirname, extname } from '@baeta/util-path';\nimport fs from 'node:fs/promises';\n\n/**\n * Options for generated files.\n */\nexport interface FileOptions {\n /**\n * Add generation notice at the beginning of the file.\n * @default true\n */\n addGenerationNoticeHeader?: boolean;\n\n /**\n * Add eslint-disable comment at the beginning of the file.\n * @default true\n */\n addEslintDisableHeader?: boolean;\n\n /**\n * Add custom header at the beginning of the file.\n */\n addHeader?: (name: string, content: string, tag: string) => string;\n\n /**\n * Edit the content of the file before writing it.\n */\n transformContent?: (name: string, content: string, tag: string) => string | Promise<string>;\n}\n\nexport class File {\n persisted = false;\n\n constructor(\n public filename: string,\n public content: string,\n public tag: string,\n private options?: FileOptions,\n ) {}\n\n write = async () => {\n if (this.persisted) {\n return;\n }\n this.persisted = true;\n\n const dir = dirname(this.filename);\n await fs.mkdir(dir, { recursive: true });\n\n const content = await this.buildContent();\n\n return fs.writeFile(this.filename, content, 'utf-8');\n };\n\n unlink = async () => {\n this.persisted = false;\n return fs.unlink(this.filename);\n };\n\n protected async buildContent() {\n const content = this.buildHeader() + this.content;\n\n if (this.options?.transformContent) {\n return this.options.transformContent(this.filename, content, this.tag);\n }\n\n return content;\n }\n\n protected buildHeader() {\n const headerItems: string[] = [];\n\n if (this.options?.addGenerationNoticeHeader !== false) {\n const comment = this.createComment(\n 'This file was generated by Baeta. Do not edit it directly. All changes will be overwritten by the generator.',\n );\n headerItems.push(comment);\n }\n\n if (this.options?.addEslintDisableHeader !== false) {\n const comment = this.createComment('eslint-disable');\n headerItems.push(comment);\n }\n\n if (this.options?.addHeader) {\n const customHeader = this.options.addHeader(this.filename, this.content, this.tag);\n headerItems.push(customHeader);\n }\n\n if (headerItems.length === 0) {\n return '';\n }\n\n return `${headerItems.join('\\n')}\\n\\n`;\n }\n\n protected createComment(comment: string) {\n const extension = extname(this.filename);\n\n if (['.gql', '.graphql'].includes(extension)) {\n return `# ${comment}`;\n }\n\n return `/* ${comment} */`;\n }\n}\n","import { dirname } from '@baeta/util-path';\nimport { mkdir, open, writeFile } from 'node:fs/promises';\nimport { File, FileOptions } from './file';\n\nexport class FileBlock extends File {\n constructor(\n filename: string,\n content: string,\n protected start: string,\n protected end: string,\n tag: string,\n options?: FileOptions,\n ) {\n super(filename, content, tag, {\n addEslintDisableHeader: options?.addEslintDisableHeader ?? false,\n addGenerationNoticeHeader: options?.addGenerationNoticeHeader ?? false,\n });\n }\n\n write = async () => {\n if (this.persisted) {\n return;\n }\n this.persisted = true;\n\n const dir = dirname(this.filename);\n await mkdir(dir, { recursive: true });\n\n const [existingContent, fd] = await this.getExistingContent();\n this.addBlockToContent(existingContent);\n const content = await this.buildContent();\n\n if (fd) {\n await fd.write(content, 0, 'utf-8');\n await fd.close();\n } else {\n await writeFile(this.filename, content, 'utf-8');\n }\n };\n\n protected async getExistingContent() {\n try {\n const fd = await open(this.filename, 'r+');\n const existingContent = await fd.readFile('utf-8');\n return [existingContent, fd] as const;\n } catch (err) {\n return ['', null] as const;\n }\n }\n\n protected getSlices(existingContent: string) {\n const startMarkerIndex = existingContent.indexOf(this.start);\n const endMarkerIndex = existingContent.indexOf(this.end);\n\n if (startMarkerIndex === -1 || endMarkerIndex === -1) {\n return [existingContent, ''] as const;\n }\n\n return [\n existingContent.slice(0, startMarkerIndex),\n existingContent.slice(endMarkerIndex + this.end.length),\n ] as const;\n }\n\n protected addBlockToContent(existingContent: string) {\n const block = `${this.start}\\n${this.content}\\n${this.end}`;\n const padding = this.buildPadding(existingContent);\n const [startSlice, endSlice] = this.getSlices(existingContent);\n this.content = startSlice + padding + block + endSlice;\n }\n\n protected stripBlock(existingContent: string) {\n const [startSlice, endSlice] = this.getSlices(existingContent);\n return startSlice + endSlice;\n }\n\n protected buildPadding(existingContent: string) {\n const existingStripped = this.stripBlock(existingContent);\n\n if (existingStripped === '') {\n return '';\n }\n\n if (existingStripped.endsWith('\\n\\n')) {\n return '';\n }\n\n if (existingStripped.endsWith('\\n')) {\n return '\\n';\n }\n\n return '\\n\\n';\n }\n}\n","import { File, FileOptions } from './file';\n\nexport class FileManager {\n files: File[] = [];\n\n constructor(public fileOptions?: FileOptions) {}\n\n createAndAdd(filename: string, content: string, tag: string) {\n const file = new File(filename, content, tag, this.fileOptions);\n this.add(file);\n return file;\n }\n\n add(...file: File[]) {\n this.files.push(...file);\n }\n\n get(filename: string) {\n return this.files.find((file) => file.filename === filename);\n }\n\n getAll() {\n return this.files;\n }\n\n getByTag(tag: string) {\n return this.files.filter((file) => file.tag === tag);\n }\n\n remove(filename: string) {\n const index = this.files.findIndex((file) => file.filename === filename);\n this.files.splice(index, 1);\n }\n\n removeAll() {\n this.files = [];\n }\n\n removeByTag(tag: string) {\n this.files = this.files.filter((file) => file.tag !== tag);\n }\n\n writeAll() {\n const toWrite = this.files.filter((file) => !file.persisted);\n return Promise.all(toWrite.map((file) => file.write()));\n }\n\n writeByTag(tag: string) {\n const files = this.getByTag(tag);\n const toWrite = files.filter((file) => !file.persisted);\n return Promise.all(toWrite.map((file) => file.write()));\n }\n\n unlinkAll() {\n return Promise.all(this.files.map((file) => file.unlink())).then(() => {\n // void\n });\n }\n\n getPersistedFiles() {\n return this.files.filter((file) => file.persisted);\n }\n\n getPersistedFileNames() {\n return this.getPersistedFiles().map((file) => file.filename);\n }\n}\n","import { camelCase, pascalCase } from 'change-case-all';\n\nexport function getModuleGetName(name: string) {\n return `get${pascalCase(name)}Module`;\n}\n\nexport function getModuleCreateName(name: string) {\n return `create${pascalCase(name)}Module`;\n}\n\nexport function getModuleVariableName(name: string) {\n return camelCase(`${name}Module`);\n}\n","import { PluginType } from '@baeta/plugin';\nimport { NormalizedGeneratorOptions } from './config';\nimport { Ctx } from './ctx';\nimport { Watcher, WatcherFile } from './watcher';\n\nexport enum GeneratorPluginVersion {\n V1 = 'v1',\n}\n\nexport type GeneratorPluginV1Fn<Store = unknown> = (\n ctx: Ctx<Store>,\n next: () => Promise<void>,\n) => Promise<void>;\n\nexport type GeneratorPluginV1ReloadFn = (file: WatcherFile) => void;\n\nexport type GeneratorPluginV1WatchOptions = (\n options: NormalizedGeneratorOptions,\n watcher: Watcher,\n reload: GeneratorPluginV1ReloadFn,\n) => void;\n\nexport type GeneratorPluginV1Factory<Store = unknown> = {\n name: string;\n actionName: string;\n setup?: GeneratorPluginV1Fn<Store>;\n generate?: GeneratorPluginV1Fn<Store>;\n end?: GeneratorPluginV1Fn<Store>;\n watch?: GeneratorPluginV1WatchOptions;\n};\n\nexport interface GeneratorPluginV1<Store = unknown> {\n name: string;\n actionName: string;\n version: GeneratorPluginVersion.V1;\n type: PluginType.Generator;\n setup: GeneratorPluginV1Fn<Store>;\n generate: GeneratorPluginV1Fn<Store>;\n end: GeneratorPluginV1Fn<Store>;\n watch: GeneratorPluginV1WatchOptions;\n}\n\nconst defaultPluginFn: GeneratorPluginV1Fn<unknown> = async (ctx, next) => {\n return next();\n};\n\nconst defaultWatchFn = () => ({ include: [], ignore: [] });\n\nexport function createPluginV1<Store = {}>(\n options: GeneratorPluginV1Factory<Store>,\n): GeneratorPluginV1<Store> {\n return {\n name: options.name,\n actionName: options.actionName,\n version: GeneratorPluginVersion.V1,\n type: PluginType.Generator,\n end: options.end ?? defaultPluginFn,\n generate: options.generate ?? defaultPluginFn,\n setup: options.setup ?? defaultPluginFn,\n watch: options.watch ?? defaultWatchFn,\n };\n}\n\nexport function isGeneratorPlugin(plugin: {\n type: PluginType;\n}): plugin is GeneratorPluginV1<unknown> {\n return plugin.type === PluginType.Generator;\n}\n\nexport function getGeneratorPlugins(plugins?: Array<{ type: PluginType }>) {\n if (!plugins) {\n return [];\n }\n return plugins.filter(isGeneratorPlugin);\n}\n","import path, { posixPath } from '@baeta/util-path';\nimport { AsyncSubscription, Event, EventType, Options, subscribe } from '@parcel/watcher';\nimport micromatch from 'micromatch';\nimport { MatchPattern, WatcherIgnore } from './watcher-ignore';\n\nexport { micromatch };\nexport const isMatch = micromatch.isMatch;\n\nexport type WatcherListener = (path: WatcherFile) => void;\n\nexport interface WatcherFile {\n type: EventType;\n path: string;\n relativePath: string;\n}\nexport class Watcher {\n private subscription: AsyncSubscription;\n\n private listeners: Record<EventType, WatcherListener[]> = {\n create: [],\n update: [],\n delete: [],\n };\n\n private watcherIgnore: WatcherIgnore;\n\n constructor(\n private readonly cwd: string,\n private readonly options?: Options,\n ) {\n this.watcherIgnore = new WatcherIgnore(cwd);\n this.subscription = this.createSubscription();\n }\n\n onEvents = (err: Error | null, events: Event[]) => {\n if (err) {\n console.error(err);\n return;\n }\n\n const filteredEvents = events.filter((event) => {\n return !this.watcherIgnore.isIgnored(posixPath(event.path));\n });\n\n for (const event of filteredEvents) {\n for (const listener of this.listeners[event.type]) {\n listener({\n type: event.type,\n path: posixPath(event.path),\n relativePath: posixPath(path.relative(this.cwd, event.path)),\n });\n }\n }\n };\n\n on(event: EventType, listener: WatcherListener) {\n this.listeners[event].push(listener);\n }\n\n off(event: EventType, listener: WatcherListener) {\n this.listeners[event] = this.listeners[event].filter((l) => l !== listener);\n }\n\n ignore(pattern: MatchPattern) {\n this.watcherIgnore.ignore(pattern);\n }\n\n unignore(pattern: MatchPattern) {\n this.watcherIgnore.unignore(pattern);\n }\n\n createSubscription() {\n const promise = subscribe(this.cwd, this.onEvents, this.options);\n\n const unsubscribe = async () => {\n const subscription = await promise;\n await subscription.unsubscribe();\n };\n\n return {\n unsubscribe,\n };\n }\n\n close() {\n return this.subscription.unsubscribe();\n }\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 private files: string[] = [];\n private regexps: RegExp[] = [];\n private functions: MatchFn[] = [];\n\n private globs: MatchFn[] = [];\n private globsMap = new Map<string, MatchFn>();\n\n constructor(private readonly cwd: string) {}\n\n ignore(pattern: MatchPattern) {\n if (pattern instanceof RegExp) {\n this.regexps.push(pattern);\n return;\n }\n\n if (typeof pattern === 'function') {\n this.functions.push(pattern);\n return;\n }\n\n if (!this.isMicromatch(pattern)) {\n this.files.push(this.resolveFile(pattern));\n return;\n }\n\n this.globsMap.set(pattern, micromatch.matcher(pattern));\n this.globs = Array.from(this.globsMap.values());\n }\n\n isMicromatch(pattern: string) {\n const result = micromatch.scan(pattern);\n return result.isBrace || result.isGlobstar || result.isExtglob || result.isGlob;\n }\n\n resolveFile(file: string) {\n return path.isAbsolute(file) ? file : path.join(this.cwd, file);\n }\n\n unignore(pattern: MatchPattern) {\n if (pattern instanceof RegExp) {\n this.regexps = this.regexps.filter((p) => p !== pattern);\n return;\n }\n\n if (typeof pattern === 'function') {\n this.functions = this.functions.filter((p) => p !== pattern);\n return;\n }\n\n if (!this.isMicromatch(pattern)) {\n const file = this.resolveFile(pattern);\n this.files = this.files.filter((p) => p !== file);\n return;\n }\n\n this.globsMap.delete(pattern);\n this.globs = Array.from(this.globsMap.values());\n }\n\n isIgnored(path: string) {\n if (this.files.includes(path)) {\n return true;\n }\n\n if (this.globs.some((f) => f(path))) {\n return true;\n }\n\n if (this.regexps.some((r) => r.test(path))) {\n return true;\n }\n\n if (this.functions.some((f) => f(path))) {\n return true;\n }\n\n return false;\n }\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\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\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\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\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 = 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
|
|
|
@@ -171,9 +185,8 @@ declare class FileBlock extends File {
|
|
|
171
185
|
constructor(filename: string, content: string, start: string, end: string, tag: string, options?: FileOptions);
|
|
172
186
|
write: () => Promise<void>;
|
|
173
187
|
protected getExistingContent(): Promise<readonly [string, fs_promises.FileHandle] | readonly ["", null]>;
|
|
174
|
-
protected getSlices(existingContent: string): readonly [string, string];
|
|
175
|
-
protected addBlockToContent(existingContent: string):
|
|
176
|
-
protected stripBlock(existingContent: string): string;
|
|
188
|
+
protected getSlices(existingContent: string): readonly [string, "", false] | readonly [string, string, true];
|
|
189
|
+
protected addBlockToContent(existingContent: string): string;
|
|
177
190
|
protected buildPadding(existingContent: string): "" | "\n" | "\n\n";
|
|
178
191
|
}
|
|
179
192
|
|
|
@@ -205,7 +218,7 @@ interface GeneratorPluginV1<Store = unknown> {
|
|
|
205
218
|
end: GeneratorPluginV1Fn<Store>;
|
|
206
219
|
watch: GeneratorPluginV1WatchOptions;
|
|
207
220
|
}
|
|
208
|
-
declare function createPluginV1<Store =
|
|
221
|
+
declare function createPluginV1<Store = unknown>(options: GeneratorPluginV1Factory<Store>): GeneratorPluginV1<Store>;
|
|
209
222
|
declare function isGeneratorPlugin(plugin: {
|
|
210
223
|
type: PluginType;
|
|
211
224
|
}): plugin is GeneratorPluginV1<unknown>;
|
|
@@ -213,4 +226,4 @@ declare function getGeneratorPlugins(plugins?: Array<{
|
|
|
213
226
|
type: PluginType;
|
|
214
227
|
}>): GeneratorPluginV1<unknown>[];
|
|
215
228
|
|
|
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 };
|
|
229
|
+
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
|
|
|
@@ -171,9 +185,8 @@ declare class FileBlock extends File {
|
|
|
171
185
|
constructor(filename: string, content: string, start: string, end: string, tag: string, options?: FileOptions);
|
|
172
186
|
write: () => Promise<void>;
|
|
173
187
|
protected getExistingContent(): Promise<readonly [string, fs_promises.FileHandle] | readonly ["", null]>;
|
|
174
|
-
protected getSlices(existingContent: string): readonly [string, string];
|
|
175
|
-
protected addBlockToContent(existingContent: string):
|
|
176
|
-
protected stripBlock(existingContent: string): string;
|
|
188
|
+
protected getSlices(existingContent: string): readonly [string, "", false] | readonly [string, string, true];
|
|
189
|
+
protected addBlockToContent(existingContent: string): string;
|
|
177
190
|
protected buildPadding(existingContent: string): "" | "\n" | "\n\n";
|
|
178
191
|
}
|
|
179
192
|
|
|
@@ -205,7 +218,7 @@ interface GeneratorPluginV1<Store = unknown> {
|
|
|
205
218
|
end: GeneratorPluginV1Fn<Store>;
|
|
206
219
|
watch: GeneratorPluginV1WatchOptions;
|
|
207
220
|
}
|
|
208
|
-
declare function createPluginV1<Store =
|
|
221
|
+
declare function createPluginV1<Store = unknown>(options: GeneratorPluginV1Factory<Store>): GeneratorPluginV1<Store>;
|
|
209
222
|
declare function isGeneratorPlugin(plugin: {
|
|
210
223
|
type: PluginType;
|
|
211
224
|
}): plugin is GeneratorPluginV1<unknown>;
|
|
@@ -213,4 +226,4 @@ declare function getGeneratorPlugins(plugins?: Array<{
|
|
|
213
226
|
type: PluginType;
|
|
214
227
|
}>): GeneratorPluginV1<unknown>[];
|
|
215
228
|
|
|
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 };
|
|
229
|
+
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) {
|
|
@@ -49,8 +51,8 @@ function resolveExtensionPath(modulesDir, moduleDefinitionName, extensionsPath)
|
|
|
49
51
|
}
|
|
50
52
|
|
|
51
53
|
// lib/file.ts
|
|
52
|
-
import { dirname, extname } from "@baeta/util-path";
|
|
53
54
|
import fs from "node:fs/promises";
|
|
55
|
+
import { dirname, extname } from "@baeta/util-path";
|
|
54
56
|
var File = class {
|
|
55
57
|
constructor(filename, content, tag, options) {
|
|
56
58
|
this.filename = filename;
|
|
@@ -113,8 +115,8 @@ var File = class {
|
|
|
113
115
|
};
|
|
114
116
|
|
|
115
117
|
// lib/file-block.ts
|
|
116
|
-
import { dirname as dirname2 } from "@baeta/util-path";
|
|
117
118
|
import { mkdir, open, writeFile } from "node:fs/promises";
|
|
119
|
+
import { dirname as dirname2 } from "@baeta/util-path";
|
|
118
120
|
var FileBlock = class extends File {
|
|
119
121
|
constructor(filename, content, start, end, tag, options) {
|
|
120
122
|
super(filename, content, tag, {
|
|
@@ -132,9 +134,10 @@ var FileBlock = class extends File {
|
|
|
132
134
|
const dir = dirname2(this.filename);
|
|
133
135
|
await mkdir(dir, { recursive: true });
|
|
134
136
|
const [existingContent, fd] = await this.getExistingContent();
|
|
135
|
-
this.addBlockToContent(existingContent);
|
|
137
|
+
this.content = this.addBlockToContent(existingContent);
|
|
136
138
|
const content = await this.buildContent();
|
|
137
139
|
if (fd) {
|
|
140
|
+
await fd.truncate(0);
|
|
138
141
|
await fd.write(content, 0, "utf-8");
|
|
139
142
|
await fd.close();
|
|
140
143
|
} else {
|
|
@@ -152,36 +155,32 @@ var FileBlock = class extends File {
|
|
|
152
155
|
}
|
|
153
156
|
getSlices(existingContent) {
|
|
154
157
|
const startMarkerIndex = existingContent.indexOf(this.start);
|
|
155
|
-
const endMarkerIndex = existingContent.
|
|
158
|
+
const endMarkerIndex = existingContent.lastIndexOf(this.end);
|
|
156
159
|
if (startMarkerIndex === -1 || endMarkerIndex === -1) {
|
|
157
|
-
return [existingContent, ""];
|
|
160
|
+
return [existingContent, "", false];
|
|
158
161
|
}
|
|
159
162
|
return [
|
|
160
163
|
existingContent.slice(0, startMarkerIndex),
|
|
161
|
-
existingContent.slice(endMarkerIndex + this.end.length)
|
|
164
|
+
existingContent.slice(endMarkerIndex + this.end.length),
|
|
165
|
+
true
|
|
162
166
|
];
|
|
163
167
|
}
|
|
164
168
|
addBlockToContent(existingContent) {
|
|
165
169
|
const block = `${this.start}
|
|
166
170
|
${this.content}
|
|
167
171
|
${this.end}`;
|
|
168
|
-
const
|
|
169
|
-
const
|
|
170
|
-
|
|
171
|
-
}
|
|
172
|
-
stripBlock(existingContent) {
|
|
173
|
-
const [startSlice, endSlice] = this.getSlices(existingContent);
|
|
174
|
-
return startSlice + endSlice;
|
|
172
|
+
const [startSlice, endSlice, hasMarkers] = this.getSlices(existingContent);
|
|
173
|
+
const padding = hasMarkers ? "" : this.buildPadding(existingContent);
|
|
174
|
+
return startSlice + padding + block + endSlice;
|
|
175
175
|
}
|
|
176
176
|
buildPadding(existingContent) {
|
|
177
|
-
|
|
178
|
-
if (existingStripped === "") {
|
|
177
|
+
if (existingContent === "") {
|
|
179
178
|
return "";
|
|
180
179
|
}
|
|
181
|
-
if (
|
|
180
|
+
if (existingContent.endsWith("\n\n")) {
|
|
182
181
|
return "";
|
|
183
182
|
}
|
|
184
|
-
if (
|
|
183
|
+
if (existingContent.endsWith("\n")) {
|
|
185
184
|
return "\n";
|
|
186
185
|
}
|
|
187
186
|
return "\n\n";
|
|
@@ -288,7 +287,9 @@ function getGeneratorPlugins(plugins) {
|
|
|
288
287
|
|
|
289
288
|
// lib/watcher.ts
|
|
290
289
|
import path2, { posixPath as posixPath2 } from "@baeta/util-path";
|
|
291
|
-
import {
|
|
290
|
+
import {
|
|
291
|
+
subscribe
|
|
292
|
+
} from "@parcel/watcher";
|
|
292
293
|
import micromatch2 from "micromatch";
|
|
293
294
|
|
|
294
295
|
// lib/watcher-ignore.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 { FileOptions } from './file';\n\n/**\n * Options for the graphql generator.\n */\nexport interface GeneratorOptions {\n /**\n * Current working directory.\n * @default process.cwd()\n */\n cwd?: string;\n\n /**\n * Glob pattern(s) to load graphql schema files.\n * @default ['src/∗∗/∗.graphql']\n */\n schemas: string[];\n\n /**\n * Directory where modules are defined.\n * @default 'src/modules'\n */\n modulesDir?: string;\n\n /**\n * Name for the generated module definition file. This will contain type definitions and the graphql ast.\n * @default 'typedef.ts'\n */\n moduleDefinitionName?: string;\n\n /**\n * Path for the generated base types file.\n * @default `${modulesDir}/../__generated__/types.ts`\n */\n baseTypesPath?: string;\n\n /**\n * Path where the context type is exported.\n * @example contextType: 'src/types/context#Context' // for named export\n * @example contextType: 'src/types/context' // for default export\n * @default undefined\n */\n contextType?: string;\n\n /**\n * Path where extensions (ex. auth-extension) are exported. Only default export is supported.\n * @example extensions: 'src/extensions'\n * @default undefined\n */\n extensions?: string;\n\n /**\n * Custom scalar mappings.\n * @example scalars: { DateTime: 'Date' }\n * @default undefined\n */\n scalars?: Record<string, string>;\n\n /**\n * Options for generated files.\n */\n fileOptions?: FileOptions;\n}\n\nexport interface NormalizedGeneratorOptions {\n cwd: string;\n schemas: string[];\n modulesDir: string;\n moduleDefinitionName: string;\n baseTypesPath: string;\n contextType?: string;\n extensions?: string;\n scalars?: Record<string, string>;\n fileOptions?: FileOptions;\n}\n\nexport function loadOptions(options: GeneratorOptions): NormalizedGeneratorOptions {\n const cwd = posixPath(options.cwd ?? process.cwd());\n const schemas = options.schemas ?? ['src/**/*.graphql'];\n const modulesDir = posixPath(resolve(cwd, options.modulesDir || 'src/modules'));\n const moduleDefinitionName = options.moduleDefinitionName || 'typedef.ts';\n\n const defaultBaseTypesRoot = resolve(modulesDir, '../__generated__/types.ts');\n const baseTypesRoot = resolve(cwd, options.baseTypesPath || defaultBaseTypesRoot);\n const baseTypesPath = posixPath(relative(modulesDir, baseTypesRoot));\n\n const contextType = resolveContextType(cwd, baseTypesRoot, options.contextType);\n const extensions = resolveExtensionPath(modulesDir, moduleDefinitionName, options.extensions);\n\n return {\n cwd,\n schemas,\n modulesDir,\n moduleDefinitionName,\n baseTypesPath,\n contextType,\n extensions,\n scalars: options.scalars,\n fileOptions: options.fileOptions,\n };\n}\n\nfunction resolveContextType(root: string, baseTypesRoot: string, contextType?: string) {\n if (!contextType) {\n return;\n }\n\n if (isAbsolute(contextType)) {\n return contextType;\n }\n\n if (contextType[0] === '!') {\n return contextType.slice(1);\n }\n\n const contextTypeRoot = resolve(root, contextType);\n\n return posixPath(relative(join(baseTypesRoot, '../'), contextTypeRoot));\n}\n\nfunction resolveExtensionPath(\n modulesDir: string,\n moduleDefinitionName: string,\n extensionsPath?: string,\n) {\n if (!extensionsPath) {\n return;\n }\n\n if (isAbsolute(extensionsPath)) {\n return extensionsPath;\n }\n\n if (extensionsPath[0] === '!') {\n return extensionsPath.slice(1);\n }\n\n return posixPath(relative(join(modulesDir, moduleDefinitionName), extensionsPath));\n}\n","import { dirname, extname } from '@baeta/util-path';\nimport fs from 'node:fs/promises';\n\n/**\n * Options for generated files.\n */\nexport interface FileOptions {\n /**\n * Add generation notice at the beginning of the file.\n * @default true\n */\n addGenerationNoticeHeader?: boolean;\n\n /**\n * Add eslint-disable comment at the beginning of the file.\n * @default true\n */\n addEslintDisableHeader?: boolean;\n\n /**\n * Add custom header at the beginning of the file.\n */\n addHeader?: (name: string, content: string, tag: string) => string;\n\n /**\n * Edit the content of the file before writing it.\n */\n transformContent?: (name: string, content: string, tag: string) => string | Promise<string>;\n}\n\nexport class File {\n persisted = false;\n\n constructor(\n public filename: string,\n public content: string,\n public tag: string,\n private options?: FileOptions,\n ) {}\n\n write = async () => {\n if (this.persisted) {\n return;\n }\n this.persisted = true;\n\n const dir = dirname(this.filename);\n await fs.mkdir(dir, { recursive: true });\n\n const content = await this.buildContent();\n\n return fs.writeFile(this.filename, content, 'utf-8');\n };\n\n unlink = async () => {\n this.persisted = false;\n return fs.unlink(this.filename);\n };\n\n protected async buildContent() {\n const content = this.buildHeader() + this.content;\n\n if (this.options?.transformContent) {\n return this.options.transformContent(this.filename, content, this.tag);\n }\n\n return content;\n }\n\n protected buildHeader() {\n const headerItems: string[] = [];\n\n if (this.options?.addGenerationNoticeHeader !== false) {\n const comment = this.createComment(\n 'This file was generated by Baeta. Do not edit it directly. All changes will be overwritten by the generator.',\n );\n headerItems.push(comment);\n }\n\n if (this.options?.addEslintDisableHeader !== false) {\n const comment = this.createComment('eslint-disable');\n headerItems.push(comment);\n }\n\n if (this.options?.addHeader) {\n const customHeader = this.options.addHeader(this.filename, this.content, this.tag);\n headerItems.push(customHeader);\n }\n\n if (headerItems.length === 0) {\n return '';\n }\n\n return `${headerItems.join('\\n')}\\n\\n`;\n }\n\n protected createComment(comment: string) {\n const extension = extname(this.filename);\n\n if (['.gql', '.graphql'].includes(extension)) {\n return `# ${comment}`;\n }\n\n return `/* ${comment} */`;\n }\n}\n","import { dirname } from '@baeta/util-path';\nimport { mkdir, open, writeFile } from 'node:fs/promises';\nimport { File, FileOptions } from './file';\n\nexport class FileBlock extends File {\n constructor(\n filename: string,\n content: string,\n protected start: string,\n protected end: string,\n tag: string,\n options?: FileOptions,\n ) {\n super(filename, content, tag, {\n addEslintDisableHeader: options?.addEslintDisableHeader ?? false,\n addGenerationNoticeHeader: options?.addGenerationNoticeHeader ?? false,\n });\n }\n\n write = async () => {\n if (this.persisted) {\n return;\n }\n this.persisted = true;\n\n const dir = dirname(this.filename);\n await mkdir(dir, { recursive: true });\n\n const [existingContent, fd] = await this.getExistingContent();\n this.addBlockToContent(existingContent);\n const content = await this.buildContent();\n\n if (fd) {\n await fd.write(content, 0, 'utf-8');\n await fd.close();\n } else {\n await writeFile(this.filename, content, 'utf-8');\n }\n };\n\n protected async getExistingContent() {\n try {\n const fd = await open(this.filename, 'r+');\n const existingContent = await fd.readFile('utf-8');\n return [existingContent, fd] as const;\n } catch (err) {\n return ['', null] as const;\n }\n }\n\n protected getSlices(existingContent: string) {\n const startMarkerIndex = existingContent.indexOf(this.start);\n const endMarkerIndex = existingContent.indexOf(this.end);\n\n if (startMarkerIndex === -1 || endMarkerIndex === -1) {\n return [existingContent, ''] as const;\n }\n\n return [\n existingContent.slice(0, startMarkerIndex),\n existingContent.slice(endMarkerIndex + this.end.length),\n ] as const;\n }\n\n protected addBlockToContent(existingContent: string) {\n const block = `${this.start}\\n${this.content}\\n${this.end}`;\n const padding = this.buildPadding(existingContent);\n const [startSlice, endSlice] = this.getSlices(existingContent);\n this.content = startSlice + padding + block + endSlice;\n }\n\n protected stripBlock(existingContent: string) {\n const [startSlice, endSlice] = this.getSlices(existingContent);\n return startSlice + endSlice;\n }\n\n protected buildPadding(existingContent: string) {\n const existingStripped = this.stripBlock(existingContent);\n\n if (existingStripped === '') {\n return '';\n }\n\n if (existingStripped.endsWith('\\n\\n')) {\n return '';\n }\n\n if (existingStripped.endsWith('\\n')) {\n return '\\n';\n }\n\n return '\\n\\n';\n }\n}\n","import { File, FileOptions } from './file';\n\nexport class FileManager {\n files: File[] = [];\n\n constructor(public fileOptions?: FileOptions) {}\n\n createAndAdd(filename: string, content: string, tag: string) {\n const file = new File(filename, content, tag, this.fileOptions);\n this.add(file);\n return file;\n }\n\n add(...file: File[]) {\n this.files.push(...file);\n }\n\n get(filename: string) {\n return this.files.find((file) => file.filename === filename);\n }\n\n getAll() {\n return this.files;\n }\n\n getByTag(tag: string) {\n return this.files.filter((file) => file.tag === tag);\n }\n\n remove(filename: string) {\n const index = this.files.findIndex((file) => file.filename === filename);\n this.files.splice(index, 1);\n }\n\n removeAll() {\n this.files = [];\n }\n\n removeByTag(tag: string) {\n this.files = this.files.filter((file) => file.tag !== tag);\n }\n\n writeAll() {\n const toWrite = this.files.filter((file) => !file.persisted);\n return Promise.all(toWrite.map((file) => file.write()));\n }\n\n writeByTag(tag: string) {\n const files = this.getByTag(tag);\n const toWrite = files.filter((file) => !file.persisted);\n return Promise.all(toWrite.map((file) => file.write()));\n }\n\n unlinkAll() {\n return Promise.all(this.files.map((file) => file.unlink())).then(() => {\n // void\n });\n }\n\n getPersistedFiles() {\n return this.files.filter((file) => file.persisted);\n }\n\n getPersistedFileNames() {\n return this.getPersistedFiles().map((file) => file.filename);\n }\n}\n","import { camelCase, pascalCase } from 'change-case-all';\n\nexport function getModuleGetName(name: string) {\n return `get${pascalCase(name)}Module`;\n}\n\nexport function getModuleCreateName(name: string) {\n return `create${pascalCase(name)}Module`;\n}\n\nexport function getModuleVariableName(name: string) {\n return camelCase(`${name}Module`);\n}\n","import { PluginType } from '@baeta/plugin';\nimport { NormalizedGeneratorOptions } from './config';\nimport { Ctx } from './ctx';\nimport { Watcher, WatcherFile } from './watcher';\n\nexport enum GeneratorPluginVersion {\n V1 = 'v1',\n}\n\nexport type GeneratorPluginV1Fn<Store = unknown> = (\n ctx: Ctx<Store>,\n next: () => Promise<void>,\n) => Promise<void>;\n\nexport type GeneratorPluginV1ReloadFn = (file: WatcherFile) => void;\n\nexport type GeneratorPluginV1WatchOptions = (\n options: NormalizedGeneratorOptions,\n watcher: Watcher,\n reload: GeneratorPluginV1ReloadFn,\n) => void;\n\nexport type GeneratorPluginV1Factory<Store = unknown> = {\n name: string;\n actionName: string;\n setup?: GeneratorPluginV1Fn<Store>;\n generate?: GeneratorPluginV1Fn<Store>;\n end?: GeneratorPluginV1Fn<Store>;\n watch?: GeneratorPluginV1WatchOptions;\n};\n\nexport interface GeneratorPluginV1<Store = unknown> {\n name: string;\n actionName: string;\n version: GeneratorPluginVersion.V1;\n type: PluginType.Generator;\n setup: GeneratorPluginV1Fn<Store>;\n generate: GeneratorPluginV1Fn<Store>;\n end: GeneratorPluginV1Fn<Store>;\n watch: GeneratorPluginV1WatchOptions;\n}\n\nconst defaultPluginFn: GeneratorPluginV1Fn<unknown> = async (ctx, next) => {\n return next();\n};\n\nconst defaultWatchFn = () => ({ include: [], ignore: [] });\n\nexport function createPluginV1<Store = {}>(\n options: GeneratorPluginV1Factory<Store>,\n): GeneratorPluginV1<Store> {\n return {\n name: options.name,\n actionName: options.actionName,\n version: GeneratorPluginVersion.V1,\n type: PluginType.Generator,\n end: options.end ?? defaultPluginFn,\n generate: options.generate ?? defaultPluginFn,\n setup: options.setup ?? defaultPluginFn,\n watch: options.watch ?? defaultWatchFn,\n };\n}\n\nexport function isGeneratorPlugin(plugin: {\n type: PluginType;\n}): plugin is GeneratorPluginV1<unknown> {\n return plugin.type === PluginType.Generator;\n}\n\nexport function getGeneratorPlugins(plugins?: Array<{ type: PluginType }>) {\n if (!plugins) {\n return [];\n }\n return plugins.filter(isGeneratorPlugin);\n}\n","import path, { posixPath } from '@baeta/util-path';\nimport { AsyncSubscription, Event, EventType, Options, subscribe } from '@parcel/watcher';\nimport micromatch from 'micromatch';\nimport { MatchPattern, WatcherIgnore } from './watcher-ignore';\n\nexport { micromatch };\nexport const isMatch = micromatch.isMatch;\n\nexport type WatcherListener = (path: WatcherFile) => void;\n\nexport interface WatcherFile {\n type: EventType;\n path: string;\n relativePath: string;\n}\nexport class Watcher {\n private subscription: AsyncSubscription;\n\n private listeners: Record<EventType, WatcherListener[]> = {\n create: [],\n update: [],\n delete: [],\n };\n\n private watcherIgnore: WatcherIgnore;\n\n constructor(\n private readonly cwd: string,\n private readonly options?: Options,\n ) {\n this.watcherIgnore = new WatcherIgnore(cwd);\n this.subscription = this.createSubscription();\n }\n\n onEvents = (err: Error | null, events: Event[]) => {\n if (err) {\n console.error(err);\n return;\n }\n\n const filteredEvents = events.filter((event) => {\n return !this.watcherIgnore.isIgnored(posixPath(event.path));\n });\n\n for (const event of filteredEvents) {\n for (const listener of this.listeners[event.type]) {\n listener({\n type: event.type,\n path: posixPath(event.path),\n relativePath: posixPath(path.relative(this.cwd, event.path)),\n });\n }\n }\n };\n\n on(event: EventType, listener: WatcherListener) {\n this.listeners[event].push(listener);\n }\n\n off(event: EventType, listener: WatcherListener) {\n this.listeners[event] = this.listeners[event].filter((l) => l !== listener);\n }\n\n ignore(pattern: MatchPattern) {\n this.watcherIgnore.ignore(pattern);\n }\n\n unignore(pattern: MatchPattern) {\n this.watcherIgnore.unignore(pattern);\n }\n\n createSubscription() {\n const promise = subscribe(this.cwd, this.onEvents, this.options);\n\n const unsubscribe = async () => {\n const subscription = await promise;\n await subscription.unsubscribe();\n };\n\n return {\n unsubscribe,\n };\n }\n\n close() {\n return this.subscription.unsubscribe();\n }\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 private files: string[] = [];\n private regexps: RegExp[] = [];\n private functions: MatchFn[] = [];\n\n private globs: MatchFn[] = [];\n private globsMap = new Map<string, MatchFn>();\n\n constructor(private readonly cwd: string) {}\n\n ignore(pattern: MatchPattern) {\n if (pattern instanceof RegExp) {\n this.regexps.push(pattern);\n return;\n }\n\n if (typeof pattern === 'function') {\n this.functions.push(pattern);\n return;\n }\n\n if (!this.isMicromatch(pattern)) {\n this.files.push(this.resolveFile(pattern));\n return;\n }\n\n this.globsMap.set(pattern, micromatch.matcher(pattern));\n this.globs = Array.from(this.globsMap.values());\n }\n\n isMicromatch(pattern: string) {\n const result = micromatch.scan(pattern);\n return result.isBrace || result.isGlobstar || result.isExtglob || result.isGlob;\n }\n\n resolveFile(file: string) {\n return path.isAbsolute(file) ? file : path.join(this.cwd, file);\n }\n\n unignore(pattern: MatchPattern) {\n if (pattern instanceof RegExp) {\n this.regexps = this.regexps.filter((p) => p !== pattern);\n return;\n }\n\n if (typeof pattern === 'function') {\n this.functions = this.functions.filter((p) => p !== pattern);\n return;\n }\n\n if (!this.isMicromatch(pattern)) {\n const file = this.resolveFile(pattern);\n this.files = this.files.filter((p) => p !== file);\n return;\n }\n\n this.globsMap.delete(pattern);\n this.globs = Array.from(this.globsMap.values());\n }\n\n isIgnored(path: string) {\n if (this.files.includes(path)) {\n return true;\n }\n\n if (this.globs.some((f) => f(path))) {\n return true;\n }\n\n if (this.regexps.some((r) => r.test(path))) {\n return true;\n }\n\n if (this.functions.some((f) => f(path))) {\n return true;\n }\n\n return false;\n }\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\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\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\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\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 = 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.
|
|
3
|
+
"version": "0.1.1",
|
|
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,23 +44,32 @@
|
|
|
44
44
|
"types": "tsc --noEmit"
|
|
45
45
|
},
|
|
46
46
|
"dependencies": {
|
|
47
|
-
"@baeta/plugin": "^0.
|
|
48
|
-
"@baeta/util-path": "^0.
|
|
49
|
-
"@parcel/watcher": "^2.
|
|
47
|
+
"@baeta/plugin": "^0.1.1",
|
|
48
|
+
"@baeta/util-path": "^0.1.1",
|
|
49
|
+
"@parcel/watcher": "^2.5.0",
|
|
50
50
|
"change-case-all": "2.1.0",
|
|
51
|
-
"micromatch": "^4.0.
|
|
51
|
+
"micromatch": "^4.0.8"
|
|
52
52
|
},
|
|
53
53
|
"devDependencies": {
|
|
54
54
|
"@baeta/builder": "^0.0.0",
|
|
55
55
|
"@baeta/tsconfig": "^0.0.0",
|
|
56
56
|
"@types/micromatch": "^4.0.9",
|
|
57
|
-
"@types/node": "^
|
|
58
|
-
"typescript": "^5.
|
|
57
|
+
"@types/node": "^22.9.0",
|
|
58
|
+
"typescript": "^5.6.3"
|
|
59
59
|
},
|
|
60
60
|
"engines": {
|
|
61
|
-
"node": ">=
|
|
61
|
+
"node": ">=22.0.0"
|
|
62
62
|
},
|
|
63
63
|
"publishConfig": {
|
|
64
64
|
"access": "public"
|
|
65
|
+
},
|
|
66
|
+
"ava": {
|
|
67
|
+
"extensions": {
|
|
68
|
+
"ts": "module"
|
|
69
|
+
},
|
|
70
|
+
"nodeArguments": [
|
|
71
|
+
"--no-warnings",
|
|
72
|
+
"--experimental-transform-types"
|
|
73
|
+
]
|
|
65
74
|
}
|
|
66
75
|
}
|