on-zero 0.1.22 → 0.1.23

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (42) hide show
  1. package/dist/cjs/cli.cjs +17 -424
  2. package/dist/cjs/cli.js +7 -402
  3. package/dist/cjs/cli.js.map +2 -2
  4. package/dist/cjs/cli.native.js +15 -519
  5. package/dist/cjs/cli.native.js.map +1 -1
  6. package/dist/cjs/generate.cjs +370 -0
  7. package/dist/cjs/generate.js +339 -0
  8. package/dist/cjs/generate.js.map +6 -0
  9. package/dist/cjs/generate.native.js +464 -0
  10. package/dist/cjs/generate.native.js.map +1 -0
  11. package/dist/cjs/vite-plugin.cjs +37 -121
  12. package/dist/cjs/vite-plugin.js +41 -100
  13. package/dist/cjs/vite-plugin.js.map +1 -1
  14. package/dist/cjs/vite-plugin.native.js +47 -157
  15. package/dist/cjs/vite-plugin.native.js.map +1 -1
  16. package/dist/esm/cli.js +8 -388
  17. package/dist/esm/cli.js.map +2 -2
  18. package/dist/esm/cli.mjs +17 -402
  19. package/dist/esm/cli.mjs.map +1 -1
  20. package/dist/esm/cli.native.js +15 -497
  21. package/dist/esm/cli.native.js.map +1 -1
  22. package/dist/esm/generate.js +317 -0
  23. package/dist/esm/generate.js.map +6 -0
  24. package/dist/esm/generate.mjs +335 -0
  25. package/dist/esm/generate.mjs.map +1 -0
  26. package/dist/esm/generate.native.js +426 -0
  27. package/dist/esm/generate.native.js.map +1 -0
  28. package/dist/esm/vite-plugin.js +42 -102
  29. package/dist/esm/vite-plugin.js.map +1 -1
  30. package/dist/esm/vite-plugin.mjs +37 -121
  31. package/dist/esm/vite-plugin.mjs.map +1 -1
  32. package/dist/esm/vite-plugin.native.js +47 -157
  33. package/dist/esm/vite-plugin.native.js.map +1 -1
  34. package/package.json +2 -2
  35. package/readme.md +0 -29
  36. package/src/cli.ts +9 -646
  37. package/src/generate.ts +490 -0
  38. package/src/vite-plugin.ts +61 -189
  39. package/types/generate.d.ts +21 -0
  40. package/types/generate.d.ts.map +1 -0
  41. package/types/vite-plugin.d.ts +6 -29
  42. package/types/vite-plugin.d.ts.map +1 -1
@@ -19,127 +19,68 @@ __export(vite_plugin_exports, {
19
19
  onZeroPlugin: () => onZeroPlugin
20
20
  });
21
21
  module.exports = __toCommonJS(vite_plugin_exports);
22
- var import_node_crypto = require("node:crypto"), import_node_fs = require("node:fs"), import_node_path = require("node:path");
23
- const hash = (s) => (0, import_node_crypto.createHash)("sha256").update(s).digest("hex");
24
- let generateCache = {};
25
- function writeFileIfChanged(filePath, content) {
26
- const contentHash = hash(content);
27
- return generateCache[filePath] === contentHash && (0, import_node_fs.existsSync)(filePath) ? !1 : ((0, import_node_fs.writeFileSync)(filePath, content, "utf-8"), generateCache[filePath] = contentHash, !0);
28
- }
29
- function generateModelsFile(modelFiles) {
30
- const modelNames = modelFiles.map((f) => (0, import_node_path.basename)(f, ".ts")).sort(), getImportName = (name) => name === "user" ? "userPublic" : name, imports = modelNames.map((name) => `import * as ${getImportName(name)} from '../models/${name}'`).join(`
31
- `), modelsObj = `export const models = {
32
- ${[...modelNames].sort(
33
- (a, b) => getImportName(a).localeCompare(getImportName(b))
34
- ).map((name) => ` ${getImportName(name)},`).join(`
35
- `)}
36
- }`;
37
- return `// auto-generated by on-zero vite plugin
38
- ${imports}
39
-
40
- ${modelsObj}
41
-
42
- if (import.meta.hot) {
43
- import.meta.hot.accept()
44
- }
45
- `;
46
- }
47
- function generateTypesFile(modelFiles) {
48
- const modelNames = modelFiles.map((f) => (0, import_node_path.basename)(f, ".ts")).sort(), getSchemaName = (name) => name === "user" ? "userPublic" : name;
49
- return `import type { TableInsertRow, TableUpdateRow } from 'on-zero'
50
- import type * as schema from './tables'
51
-
52
- ${modelNames.map((name) => {
53
- const pascalName = name.charAt(0).toUpperCase() + name.slice(1), schemaName = getSchemaName(name);
54
- return `export type ${pascalName} = TableInsertRow<typeof schema.${schemaName}>
55
- export type ${pascalName}Update = TableUpdateRow<typeof schema.${schemaName}>`;
56
- }).join(`
57
-
58
- `)}
59
- `;
60
- }
61
- function generateTablesFile(modelFiles) {
62
- const modelNames = modelFiles.map((f) => (0, import_node_path.basename)(f, ".ts")).sort(), getExportName = (name) => name === "user" ? "userPublic" : name;
63
- return `// auto-generated by on-zero vite plugin
64
-
65
- ${modelNames.map((name) => `export { schema as ${getExportName(name)} } from '../models/${name}'`).join(`
66
- `)}
67
- `;
22
+ var import_node_path = require("node:path"), import_generate = require("./generate");
23
+ function createOnZeroHmrPlugin(hmrInclude = []) {
24
+ const hmrPaths = ["/models/", "/generated/", "/queries/", ...hmrInclude];
25
+ return {
26
+ name: "on-zero:hmr",
27
+ apply: "serve",
28
+ enforce: "post",
29
+ transform(code, id) {
30
+ if (!(!hmrPaths.some((p) => id.includes(p)) || !/\.tsx?$/.test(id)) && code.includes("import.meta.hot.invalidate"))
31
+ return {
32
+ code: code.replace(
33
+ /if\s*\(invalidateMessage\)\s*import\.meta\.hot\.invalidate\(invalidateMessage\);?/g,
34
+ "/* on-zero: HMR invalidate disabled */"
35
+ ),
36
+ map: null
37
+ };
38
+ }
39
+ };
68
40
  }
69
- async function runGenerate(options) {
70
- const { modelsDir, generatedDir, silent } = options;
71
- (0, import_node_fs.existsSync)(generatedDir) || (0, import_node_fs.mkdirSync)(generatedDir, { recursive: !0 });
72
- const allModelFiles = (0, import_node_fs.readdirSync)(modelsDir).filter((f) => f.endsWith(".ts")).sort(), filesWithSchema = allModelFiles.filter(
73
- (f) => (0, import_node_fs.readFileSync)((0, import_node_path.resolve)(modelsDir, f), "utf-8").includes("export const schema = table(")
74
- ), filesChanged = [
75
- writeFileIfChanged(
76
- (0, import_node_path.resolve)(generatedDir, "models.ts"),
77
- generateModelsFile(allModelFiles)
78
- ),
79
- writeFileIfChanged(
80
- (0, import_node_path.resolve)(generatedDir, "types.ts"),
81
- generateTypesFile(filesWithSchema)
82
- ),
83
- writeFileIfChanged(
84
- (0, import_node_path.resolve)(generatedDir, "tables.ts"),
85
- generateTablesFile(filesWithSchema)
86
- )
87
- ].filter(Boolean).length;
88
- return filesChanged > 0 && !silent && console.info(`[on-zero] generated ${filesChanged} file(s)`), filesChanged;
41
+ function isWithinDirectory(file, dir) {
42
+ const rel = (0, import_node_path.relative)(dir, file);
43
+ return rel !== "" && !rel.startsWith("..") && !(0, import_node_path.isAbsolute)(rel);
89
44
  }
90
45
  function onZeroPlugin(options = {}) {
91
- const dataDir = options.dataDir || "src/data", hmrPaths = ["/models/", "/generated/", ...options.hmrInclude || []];
92
- let modelsDir, generatedDir;
46
+ const dir = options.dir ?? "src/data";
47
+ let dataDir, modelsDir, queriesDir;
48
+ const runGenerate = (silent) => (0, import_generate.generate)({
49
+ dir: dataDir,
50
+ after: options.after,
51
+ silent
52
+ });
93
53
  return [
94
- // generation plugin
95
54
  {
96
- name: "on-zero:generate",
55
+ name: "on-zero:serve",
97
56
  apply: "serve",
98
57
  configResolved(config) {
99
- modelsDir = (0, import_node_path.resolve)(config.root, dataDir, "models"), generatedDir = (0, import_node_path.resolve)(config.root, dataDir, "generated");
58
+ dataDir = (0, import_node_path.resolve)(config.root, dir), modelsDir = (0, import_node_path.resolve)(dataDir, "models"), queriesDir = (0, import_node_path.resolve)(dataDir, "queries");
100
59
  },
101
60
  async buildStart() {
102
- options.disableGenerate || await runGenerate({ modelsDir, generatedDir, silent: !1 });
61
+ options.disableGenerate || await runGenerate(!1);
103
62
  },
104
63
  configureServer(server) {
105
- options.disableGenerate || (server.watcher.on("change", async (file) => {
106
- file.includes(modelsDir) && await runGenerate({ modelsDir, generatedDir, silent: !1 });
107
- }), server.watcher.on("add", async (file) => {
108
- file.includes(modelsDir) && await runGenerate({ modelsDir, generatedDir, silent: !1 });
109
- }), server.watcher.on("unlink", async (file) => {
110
- file.includes(modelsDir) && await runGenerate({ modelsDir, generatedDir, silent: !1 });
111
- }));
64
+ if (options.disableGenerate) return;
65
+ const handler = async (file) => {
66
+ /\.tsx?$/.test(file) && (isWithinDirectory(file, modelsDir) || isWithinDirectory(file, queriesDir)) && await runGenerate(!1);
67
+ };
68
+ server.watcher.on("change", handler), server.watcher.on("add", handler), server.watcher.on("unlink", handler);
112
69
  }
113
70
  },
114
- // HMR plugin - removes invalidate calls to prevent cascade
115
- {
116
- name: "on-zero:hmr",
117
- apply: "serve",
118
- enforce: "post",
119
- transform(code, id) {
120
- if (hmrPaths.some((p) => id.includes(p)) && /\.tsx?$/.test(id) && code.includes("import.meta.hot.invalidate"))
121
- return {
122
- code: code.replace(
123
- /if\s*\(invalidateMessage\)\s*import\.meta\.hot\.invalidate\(invalidateMessage\);?/g,
124
- "/* on-zero: HMR invalidate disabled */"
125
- ),
126
- map: null
127
- };
128
- }
129
- },
130
- // build plugin - generate once before build
131
71
  {
132
72
  name: "on-zero:build",
133
73
  apply: "build",
134
74
  configResolved(config) {
135
- modelsDir = (0, import_node_path.resolve)(config.root, dataDir, "models"), generatedDir = (0, import_node_path.resolve)(config.root, dataDir, "generated");
75
+ dataDir = (0, import_node_path.resolve)(config.root, dir);
136
76
  },
137
77
  async buildStart() {
138
- options.disableGenerate || await runGenerate({ modelsDir, generatedDir, silent: !0 });
78
+ options.disableGenerate || await runGenerate(!0);
139
79
  }
140
- }
80
+ },
81
+ createOnZeroHmrPlugin(options.hmrInclude)
141
82
  ];
142
83
  }
143
- const onZeroHmrPlugin = (options) => onZeroPlugin({ hmrInclude: options?.include, disableGenerate: !0 })[1];
84
+ const onZeroHmrPlugin = (options) => createOnZeroHmrPlugin(options?.include);
144
85
  var vite_plugin_default = onZeroPlugin;
145
86
  //# sourceMappingURL=vite-plugin.js.map
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../src/vite-plugin.ts"],
4
- "mappings": "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",
4
+ "mappings": ";;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,uBAA8C,sBAE9C,kBAA+C;AAa/C,SAAS,sBAAsB,aAAuB,CAAC,GAAW;AAChE,QAAM,WAAW,CAAC,YAAY,eAAe,aAAa,GAAG,UAAU;AAEvE,SAAO;AAAA,IACL,MAAM;AAAA,IACN,OAAO;AAAA,IACP,SAAS;AAAA,IAET,UAAU,MAAM,IAAI;AAClB,UAAI,GAAC,SAAS,KAAK,CAAC,MAAM,GAAG,SAAS,CAAC,CAAC,KAAK,CAAC,UAAU,KAAK,EAAE,MAC1D,KAAK,SAAS,4BAA4B;AAE/C,eAAO;AAAA,UACL,MAAM,KAAK;AAAA,YACT;AAAA,YACA;AAAA,UACF;AAAA,UACA,KAAK;AAAA,QACP;AAAA,IACF;AAAA,EACF;AACF;AAEA,SAAS,kBAAkB,MAAc,KAAsB;AAC7D,QAAM,UAAM,2BAAS,KAAK,IAAI;AAC9B,SAAO,QAAQ,MAAM,CAAC,IAAI,WAAW,IAAI,KAAK,KAAC,6BAAW,GAAG;AAC/D;AAEO,SAAS,aAAa,UAA+B,CAAC,GAAa;AACxE,QAAM,MAAM,QAAQ,OAAO;AAE3B,MAAI,SACA,WACA;AAEJ,QAAM,cAAc,CAAC,eACnB,0BAAS;AAAA,IACP,KAAK;AAAA,IACL,OAAO,QAAQ;AAAA,IACf;AAAA,EACF,CAAC;AAEH,SAAO;AAAA,IACL;AAAA,MACE,MAAM;AAAA,MACN,OAAO;AAAA,MAEP,eAAe,QAAQ;AACrB,sBAAU,0BAAQ,OAAO,MAAM,GAAG,GAClC,gBAAY,0BAAQ,SAAS,QAAQ,GACrC,iBAAa,0BAAQ,SAAS,SAAS;AAAA,MACzC;AAAA,MAEA,MAAM,aAAa;AACjB,QAAK,QAAQ,mBAAiB,MAAM,YAAY,EAAK;AAAA,MACvD;AAAA,MAEA,gBAAgB,QAAQ;AACtB,YAAI,QAAQ,gBAAiB;AAE7B,cAAM,UAAU,OAAO,SAAiB;AACtC,UAAK,UAAU,KAAK,IAAI,MACpB,kBAAkB,MAAM,SAAS,KAAK,kBAAkB,MAAM,UAAU,MAC1E,MAAM,YAAY,EAAK;AAAA,QAE3B;AAEA,eAAO,QAAQ,GAAG,UAAU,OAAO,GACnC,OAAO,QAAQ,GAAG,OAAO,OAAO,GAChC,OAAO,QAAQ,GAAG,UAAU,OAAO;AAAA,MACrC;AAAA,IACF;AAAA,IAEA;AAAA,MACE,MAAM;AAAA,MACN,OAAO;AAAA,MAEP,eAAe,QAAQ;AACrB,sBAAU,0BAAQ,OAAO,MAAM,GAAG;AAAA,MACpC;AAAA,MAEA,MAAM,aAAa;AACjB,QAAK,QAAQ,mBAAiB,MAAM,YAAY,EAAI;AAAA,MACtD;AAAA,IACF;AAAA,IAEA,sBAAsB,QAAQ,UAAU;AAAA,EAC1C;AACF;AAEO,MAAM,kBAAkB,CAAC,YACvB,sBAAsB,SAAS,OAAO;AAG/C,IAAO,sBAAQ;",
5
5
  "names": []
6
6
  }
@@ -27,183 +27,73 @@ __export(vite_plugin_exports, {
27
27
  onZeroPlugin: () => onZeroPlugin
28
28
  });
29
29
  module.exports = __toCommonJS(vite_plugin_exports);
30
- var import_crypto = require("crypto"),
31
- import_fs = require("fs"),
32
- import_path = require("path"),
33
- hash = function (s) {
34
- return (0, import_crypto.createHash)("sha256").update(s).digest("hex");
35
- },
36
- generateCache = {};
37
- function writeFileIfChanged(filePath, content) {
38
- var contentHash = hash(content);
39
- return generateCache[filePath] === contentHash && (0, import_fs.existsSync)(filePath) ? !1 : ((0, import_fs.writeFileSync)(filePath, content, "utf-8"), generateCache[filePath] = contentHash, !0);
40
- }
41
- function generateModelsFile(modelFiles) {
42
- var modelNames = modelFiles.map(function (f) {
43
- return (0, import_path.basename)(f, ".ts");
44
- }).sort(),
45
- getImportName = function (name) {
46
- return name === "user" ? "userPublic" : name;
47
- },
48
- imports = modelNames.map(function (name) {
49
- return `import * as ${getImportName(name)} from '../models/${name}'`;
50
- }).join(`
51
- `),
52
- sortedByImportName = [...modelNames].sort(function (a, b) {
53
- return getImportName(a).localeCompare(getImportName(b));
54
- }),
55
- modelsObj = `export const models = {
56
- ${sortedByImportName.map(function (name) {
57
- return ` ${getImportName(name)},`;
58
- }).join(`
59
- `)}
60
- }`,
61
- hmrBoundary = `
62
- if (import.meta.hot) {
63
- import.meta.hot.accept()
64
- }
65
- `;
66
- return `// auto-generated by on-zero vite plugin
67
- ${imports}
68
-
69
- ${modelsObj}
70
- ${hmrBoundary}`;
71
- }
72
- function generateTypesFile(modelFiles) {
73
- var modelNames = modelFiles.map(function (f) {
74
- return (0, import_path.basename)(f, ".ts");
75
- }).sort(),
76
- getSchemaName = function (name) {
77
- return name === "user" ? "userPublic" : name;
78
- },
79
- typeExports = modelNames.map(function (name) {
80
- var pascalName = name.charAt(0).toUpperCase() + name.slice(1),
81
- schemaName = getSchemaName(name);
82
- return `export type ${pascalName} = TableInsertRow<typeof schema.${schemaName}>
83
- export type ${pascalName}Update = TableUpdateRow<typeof schema.${schemaName}>`;
84
- }).join(`
85
-
86
- `);
87
- return `import type { TableInsertRow, TableUpdateRow } from 'on-zero'
88
- import type * as schema from './tables'
89
-
90
- ${typeExports}
91
- `;
92
- }
93
- function generateTablesFile(modelFiles) {
94
- var modelNames = modelFiles.map(function (f) {
95
- return (0, import_path.basename)(f, ".ts");
96
- }).sort(),
97
- getExportName = function (name) {
98
- return name === "user" ? "userPublic" : name;
99
- },
100
- exports = modelNames.map(function (name) {
101
- return `export { schema as ${getExportName(name)} } from '../models/${name}'`;
102
- }).join(`
103
- `);
104
- return `// auto-generated by on-zero vite plugin
105
-
106
- ${exports}
107
- `;
30
+ var import_path = require("path"),
31
+ import_generate = require("./generate.native.js");
32
+ function createOnZeroHmrPlugin() {
33
+ var hmrInclude = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : [],
34
+ hmrPaths = ["/models/", "/generated/", "/queries/", ...hmrInclude];
35
+ return {
36
+ name: "on-zero:hmr",
37
+ apply: "serve",
38
+ enforce: "post",
39
+ transform(code, id) {
40
+ if (!(!hmrPaths.some(function (p) {
41
+ return id.includes(p);
42
+ }) || !/\.tsx?$/.test(id)) && code.includes("import.meta.hot.invalidate")) return {
43
+ code: code.replace(/if\s*\(invalidateMessage\)\s*import\.meta\.hot\.invalidate\(invalidateMessage\);?/g, "/* on-zero: HMR invalidate disabled */"),
44
+ map: null
45
+ };
46
+ }
47
+ };
108
48
  }
109
- async function runGenerate(options) {
110
- var {
111
- modelsDir,
112
- generatedDir,
113
- silent
114
- } = options;
115
- (0, import_fs.existsSync)(generatedDir) || (0, import_fs.mkdirSync)(generatedDir, {
116
- recursive: !0
117
- });
118
- var allModelFiles = (0, import_fs.readdirSync)(modelsDir).filter(function (f) {
119
- return f.endsWith(".ts");
120
- }).sort(),
121
- filesWithSchema = allModelFiles.filter(function (f) {
122
- return (0, import_fs.readFileSync)((0, import_path.resolve)(modelsDir, f), "utf-8").includes("export const schema = table(");
123
- }),
124
- writeResults = [writeFileIfChanged((0, import_path.resolve)(generatedDir, "models.ts"), generateModelsFile(allModelFiles)), writeFileIfChanged((0, import_path.resolve)(generatedDir, "types.ts"), generateTypesFile(filesWithSchema)), writeFileIfChanged((0, import_path.resolve)(generatedDir, "tables.ts"), generateTablesFile(filesWithSchema))],
125
- filesChanged = writeResults.filter(Boolean).length;
126
- return filesChanged > 0 && !silent && console.info(`[on-zero] generated ${filesChanged} file(s)`), filesChanged;
49
+ function isWithinDirectory(file, dir) {
50
+ var rel = (0, import_path.relative)(dir, file);
51
+ return rel !== "" && !rel.startsWith("..") && !(0, import_path.isAbsolute)(rel);
127
52
  }
128
53
  function onZeroPlugin() {
129
54
  var options = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : {},
130
- dataDir = options.dataDir || "src/data",
131
- hmrPaths = ["/models/", "/generated/", ...(options.hmrInclude || [])],
55
+ _options_dir,
56
+ dir = (_options_dir = options.dir) !== null && _options_dir !== void 0 ? _options_dir : "src/data",
57
+ dataDir,
132
58
  modelsDir,
133
- generatedDir;
134
- return [
135
- // generation plugin
136
- {
137
- name: "on-zero:generate",
59
+ queriesDir,
60
+ runGenerate = function (silent) {
61
+ return (0, import_generate.generate)({
62
+ dir: dataDir,
63
+ after: options.after,
64
+ silent
65
+ });
66
+ };
67
+ return [{
68
+ name: "on-zero:serve",
138
69
  apply: "serve",
139
70
  configResolved(config) {
140
- modelsDir = (0, import_path.resolve)(config.root, dataDir, "models"), generatedDir = (0, import_path.resolve)(config.root, dataDir, "generated");
71
+ dataDir = (0, import_path.resolve)(config.root, dir), modelsDir = (0, import_path.resolve)(dataDir, "models"), queriesDir = (0, import_path.resolve)(dataDir, "queries");
141
72
  },
142
73
  async buildStart() {
143
- options.disableGenerate || (await runGenerate({
144
- modelsDir,
145
- generatedDir,
146
- silent: !1
147
- }));
74
+ options.disableGenerate || (await runGenerate(!1));
148
75
  },
149
76
  configureServer(server) {
150
- options.disableGenerate || (server.watcher.on("change", async function (file) {
151
- file.includes(modelsDir) && (await runGenerate({
152
- modelsDir,
153
- generatedDir,
154
- silent: !1
155
- }));
156
- }), server.watcher.on("add", async function (file) {
157
- file.includes(modelsDir) && (await runGenerate({
158
- modelsDir,
159
- generatedDir,
160
- silent: !1
161
- }));
162
- }), server.watcher.on("unlink", async function (file) {
163
- file.includes(modelsDir) && (await runGenerate({
164
- modelsDir,
165
- generatedDir,
166
- silent: !1
167
- }));
168
- }));
77
+ if (!options.disableGenerate) {
78
+ var handler = async function (file) {
79
+ /\.tsx?$/.test(file) && (isWithinDirectory(file, modelsDir) || isWithinDirectory(file, queriesDir)) && (await runGenerate(!1));
80
+ };
81
+ server.watcher.on("change", handler), server.watcher.on("add", handler), server.watcher.on("unlink", handler);
82
+ }
169
83
  }
170
- },
171
- // HMR plugin - removes invalidate calls to prevent cascade
172
- {
173
- name: "on-zero:hmr",
174
- apply: "serve",
175
- enforce: "post",
176
- transform(code, id) {
177
- var shouldTransform = hmrPaths.some(function (p) {
178
- return id.includes(p);
179
- }) && /\.tsx?$/.test(id);
180
- if (shouldTransform && code.includes("import.meta.hot.invalidate")) return {
181
- code: code.replace(/if\s*\(invalidateMessage\)\s*import\.meta\.hot\.invalidate\(invalidateMessage\);?/g, "/* on-zero: HMR invalidate disabled */"),
182
- map: null
183
- };
184
- }
185
- },
186
- // build plugin - generate once before build
187
- {
84
+ }, {
188
85
  name: "on-zero:build",
189
86
  apply: "build",
190
87
  configResolved(config) {
191
- modelsDir = (0, import_path.resolve)(config.root, dataDir, "models"), generatedDir = (0, import_path.resolve)(config.root, dataDir, "generated");
88
+ dataDir = (0, import_path.resolve)(config.root, dir);
192
89
  },
193
90
  async buildStart() {
194
- options.disableGenerate || (await runGenerate({
195
- modelsDir,
196
- generatedDir,
197
- silent: !0
198
- }));
91
+ options.disableGenerate || (await runGenerate(!0));
199
92
  }
200
- }];
93
+ }, createOnZeroHmrPlugin(options.hmrInclude)];
201
94
  }
202
95
  var onZeroHmrPlugin = function (options) {
203
- return onZeroPlugin({
204
- hmrInclude: options?.include,
205
- disableGenerate: !0
206
- })[1];
96
+ return createOnZeroHmrPlugin(options?.include);
207
97
  },
208
98
  vite_plugin_default = onZeroPlugin;
209
99
  //# sourceMappingURL=vite-plugin.native.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["__toCommonJS","mod","__copyProps","__defProp","value","vite_plugin_exports","__export","default","vite_plugin_default","onZeroHmrPlugin","onZeroPlugin","module","exports","import_crypto","require","import_fs","import_path","hash","s","createHash","update","digest","generateCache","writeFileIfChanged","filePath","content","contentHash","existsSync","writeFileSync","generateModelsFile","modelFiles","modelNames","map","f","basename","sort","getImportName","name","imports","join","sortedByImportName","a","b","localeCompare","modelsObj","hmrBoundary","generateTypesFile","getSchemaName","typeExports","pascalName","charAt","toUpperCase","slice","schemaName","generateTablesFile","getExportName","runGenerate","options","modelsDir","generatedDir","silent","mkdirSync","recursive","allModelFiles","readdirSync","filter","endsWith","filesWithSchema","readFileSync","resolve","includes","writeResults","filesChanged","Boolean","length","console","info","arguments","dataDir","hmrPaths","hmrInclude","apply","configResolved","config","root","buildStart","disableGenerate","configureServer","server","watcher","on","file"],"sources":["../../src/vite-plugin.ts"],"sourcesContent":[null],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["__toCommonJS","mod","__copyProps","__defProp","value","vite_plugin_exports","__export","default","vite_plugin_default","onZeroHmrPlugin","onZeroPlugin","module","exports","import_path","require","import_generate","createOnZeroHmrPlugin","hmrInclude","arguments","length","hmrPaths","name","apply","enforce","transform","code","id","some","p","includes","test","replace","map","isWithinDirectory","file","dir","rel","relative","startsWith","isAbsolute","options","_options_dir","dataDir","modelsDir","queriesDir","runGenerate","silent","generate","after","configResolved","config","resolve","root","buildStart","disableGenerate","configureServer","server","handler","watcher","on"],"sources":["../../src/vite-plugin.ts"],"sourcesContent":[null],"mappings":"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","ignoreList":[]}