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.
- package/dist/cjs/cli.cjs +17 -424
- package/dist/cjs/cli.js +7 -402
- package/dist/cjs/cli.js.map +2 -2
- package/dist/cjs/cli.native.js +15 -519
- package/dist/cjs/cli.native.js.map +1 -1
- package/dist/cjs/generate.cjs +370 -0
- package/dist/cjs/generate.js +339 -0
- package/dist/cjs/generate.js.map +6 -0
- package/dist/cjs/generate.native.js +464 -0
- package/dist/cjs/generate.native.js.map +1 -0
- package/dist/cjs/vite-plugin.cjs +37 -121
- package/dist/cjs/vite-plugin.js +41 -100
- package/dist/cjs/vite-plugin.js.map +1 -1
- package/dist/cjs/vite-plugin.native.js +47 -157
- package/dist/cjs/vite-plugin.native.js.map +1 -1
- package/dist/esm/cli.js +8 -388
- package/dist/esm/cli.js.map +2 -2
- package/dist/esm/cli.mjs +17 -402
- package/dist/esm/cli.mjs.map +1 -1
- package/dist/esm/cli.native.js +15 -497
- package/dist/esm/cli.native.js.map +1 -1
- package/dist/esm/generate.js +317 -0
- package/dist/esm/generate.js.map +6 -0
- package/dist/esm/generate.mjs +335 -0
- package/dist/esm/generate.mjs.map +1 -0
- package/dist/esm/generate.native.js +426 -0
- package/dist/esm/generate.native.js.map +1 -0
- package/dist/esm/vite-plugin.js +42 -102
- package/dist/esm/vite-plugin.js.map +1 -1
- package/dist/esm/vite-plugin.mjs +37 -121
- package/dist/esm/vite-plugin.mjs.map +1 -1
- package/dist/esm/vite-plugin.native.js +47 -157
- package/dist/esm/vite-plugin.native.js.map +1 -1
- package/package.json +2 -2
- package/readme.md +0 -29
- package/src/cli.ts +9 -646
- package/src/generate.ts +490 -0
- package/src/vite-plugin.ts +61 -189
- package/types/generate.d.ts +21 -0
- package/types/generate.d.ts.map +1 -0
- package/types/vite-plugin.d.ts +6 -29
- package/types/vite-plugin.d.ts.map +1 -1
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../src/vite-plugin.ts"],
|
|
4
|
-
"mappings": "AAAA,SAAS,
|
|
4
|
+
"mappings": "AAAA,SAAS,YAAY,UAAU,eAAe;AAE9C,SAAS,gBAAsC;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,MAAM,SAAS,KAAK,IAAI;AAC9B,SAAO,QAAQ,MAAM,CAAC,IAAI,WAAW,IAAI,KAAK,CAAC,WAAW,GAAG;AAC/D;AAEO,SAAS,aAAa,UAA+B,CAAC,GAAa;AACxE,QAAM,MAAM,QAAQ,OAAO;AAE3B,MAAI,SACA,WACA;AAEJ,QAAM,cAAc,CAAC,WACnB,SAAS;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,kBAAU,QAAQ,OAAO,MAAM,GAAG,GAClC,YAAY,QAAQ,SAAS,QAAQ,GACrC,aAAa,QAAQ,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,kBAAU,QAAQ,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
|
}
|
package/dist/esm/vite-plugin.mjs
CHANGED
|
@@ -1,143 +1,59 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
3
|
-
|
|
4
|
-
const
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
${[...modelNames].sort((a, b) => getImportName(a).localeCompare(getImportName(b))).map(name => ` ${getImportName(name)},`).join(`
|
|
17
|
-
`)}
|
|
18
|
-
}`;
|
|
19
|
-
return `// auto-generated by on-zero vite plugin
|
|
20
|
-
${imports}
|
|
21
|
-
|
|
22
|
-
${modelsObj}
|
|
23
|
-
|
|
24
|
-
if (import.meta.hot) {
|
|
25
|
-
import.meta.hot.accept()
|
|
26
|
-
}
|
|
27
|
-
`;
|
|
28
|
-
}
|
|
29
|
-
function generateTypesFile(modelFiles) {
|
|
30
|
-
const modelNames = modelFiles.map(f => basename(f, ".ts")).sort(),
|
|
31
|
-
getSchemaName = name => name === "user" ? "userPublic" : name;
|
|
32
|
-
return `import type { TableInsertRow, TableUpdateRow } from 'on-zero'
|
|
33
|
-
import type * as schema from './tables'
|
|
34
|
-
|
|
35
|
-
${modelNames.map(name => {
|
|
36
|
-
const pascalName = name.charAt(0).toUpperCase() + name.slice(1),
|
|
37
|
-
schemaName = getSchemaName(name);
|
|
38
|
-
return `export type ${pascalName} = TableInsertRow<typeof schema.${schemaName}>
|
|
39
|
-
export type ${pascalName}Update = TableUpdateRow<typeof schema.${schemaName}>`;
|
|
40
|
-
}).join(`
|
|
41
|
-
|
|
42
|
-
`)}
|
|
43
|
-
`;
|
|
1
|
+
import { isAbsolute, relative, resolve } from "node:path";
|
|
2
|
+
import { generate } from "./generate.mjs";
|
|
3
|
+
function createOnZeroHmrPlugin(hmrInclude = []) {
|
|
4
|
+
const hmrPaths = ["/models/", "/generated/", "/queries/", ...hmrInclude];
|
|
5
|
+
return {
|
|
6
|
+
name: "on-zero:hmr",
|
|
7
|
+
apply: "serve",
|
|
8
|
+
enforce: "post",
|
|
9
|
+
transform(code, id) {
|
|
10
|
+
if (!(!hmrPaths.some(p => id.includes(p)) || !/\.tsx?$/.test(id)) && code.includes("import.meta.hot.invalidate")) return {
|
|
11
|
+
code: code.replace(/if\s*\(invalidateMessage\)\s*import\.meta\.hot\.invalidate\(invalidateMessage\);?/g, "/* on-zero: HMR invalidate disabled */"),
|
|
12
|
+
map: null
|
|
13
|
+
};
|
|
14
|
+
}
|
|
15
|
+
};
|
|
44
16
|
}
|
|
45
|
-
function
|
|
46
|
-
const
|
|
47
|
-
|
|
48
|
-
return `// auto-generated by on-zero vite plugin
|
|
49
|
-
|
|
50
|
-
${modelNames.map(name => `export { schema as ${getExportName(name)} } from '../models/${name}'`).join(`
|
|
51
|
-
`)}
|
|
52
|
-
`;
|
|
17
|
+
function isWithinDirectory(file, dir) {
|
|
18
|
+
const rel = relative(dir, file);
|
|
19
|
+
return rel !== "" && !rel.startsWith("..") && !isAbsolute(rel);
|
|
53
20
|
}
|
|
54
|
-
|
|
55
|
-
const
|
|
56
|
-
|
|
57
|
-
|
|
21
|
+
function onZeroPlugin(options = {}) {
|
|
22
|
+
const dir = options.dir ?? "src/data";
|
|
23
|
+
let dataDir, modelsDir, queriesDir;
|
|
24
|
+
const runGenerate = silent => generate({
|
|
25
|
+
dir: dataDir,
|
|
26
|
+
after: options.after,
|
|
58
27
|
silent
|
|
59
|
-
} = options;
|
|
60
|
-
existsSync(generatedDir) || mkdirSync(generatedDir, {
|
|
61
|
-
recursive: !0
|
|
62
28
|
});
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
filesChanged = [writeFileIfChanged(resolve(generatedDir, "models.ts"), generateModelsFile(allModelFiles)), writeFileIfChanged(resolve(generatedDir, "types.ts"), generateTypesFile(filesWithSchema)), writeFileIfChanged(resolve(generatedDir, "tables.ts"), generateTablesFile(filesWithSchema))].filter(Boolean).length;
|
|
66
|
-
return filesChanged > 0 && !silent && console.info(`[on-zero] generated ${filesChanged} file(s)`), filesChanged;
|
|
67
|
-
}
|
|
68
|
-
function onZeroPlugin(options = {}) {
|
|
69
|
-
const dataDir = options.dataDir || "src/data",
|
|
70
|
-
hmrPaths = ["/models/", "/generated/", ...(options.hmrInclude || [])];
|
|
71
|
-
let modelsDir, generatedDir;
|
|
72
|
-
return [
|
|
73
|
-
// generation plugin
|
|
74
|
-
{
|
|
75
|
-
name: "on-zero:generate",
|
|
29
|
+
return [{
|
|
30
|
+
name: "on-zero:serve",
|
|
76
31
|
apply: "serve",
|
|
77
32
|
configResolved(config) {
|
|
78
|
-
|
|
33
|
+
dataDir = resolve(config.root, dir), modelsDir = resolve(dataDir, "models"), queriesDir = resolve(dataDir, "queries");
|
|
79
34
|
},
|
|
80
35
|
async buildStart() {
|
|
81
|
-
options.disableGenerate || (await runGenerate(
|
|
82
|
-
modelsDir,
|
|
83
|
-
generatedDir,
|
|
84
|
-
silent: !1
|
|
85
|
-
}));
|
|
36
|
+
options.disableGenerate || (await runGenerate(!1));
|
|
86
37
|
},
|
|
87
38
|
configureServer(server) {
|
|
88
|
-
options.disableGenerate
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
generatedDir,
|
|
92
|
-
silent: !1
|
|
93
|
-
}));
|
|
94
|
-
}), server.watcher.on("add", async file => {
|
|
95
|
-
file.includes(modelsDir) && (await runGenerate({
|
|
96
|
-
modelsDir,
|
|
97
|
-
generatedDir,
|
|
98
|
-
silent: !1
|
|
99
|
-
}));
|
|
100
|
-
}), server.watcher.on("unlink", async file => {
|
|
101
|
-
file.includes(modelsDir) && (await runGenerate({
|
|
102
|
-
modelsDir,
|
|
103
|
-
generatedDir,
|
|
104
|
-
silent: !1
|
|
105
|
-
}));
|
|
106
|
-
}));
|
|
107
|
-
}
|
|
108
|
-
},
|
|
109
|
-
// HMR plugin - removes invalidate calls to prevent cascade
|
|
110
|
-
{
|
|
111
|
-
name: "on-zero:hmr",
|
|
112
|
-
apply: "serve",
|
|
113
|
-
enforce: "post",
|
|
114
|
-
transform(code, id) {
|
|
115
|
-
if (hmrPaths.some(p => id.includes(p)) && /\.tsx?$/.test(id) && code.includes("import.meta.hot.invalidate")) return {
|
|
116
|
-
code: code.replace(/if\s*\(invalidateMessage\)\s*import\.meta\.hot\.invalidate\(invalidateMessage\);?/g, "/* on-zero: HMR invalidate disabled */"),
|
|
117
|
-
map: null
|
|
39
|
+
if (options.disableGenerate) return;
|
|
40
|
+
const handler = async file => {
|
|
41
|
+
/\.tsx?$/.test(file) && (isWithinDirectory(file, modelsDir) || isWithinDirectory(file, queriesDir)) && (await runGenerate(!1));
|
|
118
42
|
};
|
|
43
|
+
server.watcher.on("change", handler), server.watcher.on("add", handler), server.watcher.on("unlink", handler);
|
|
119
44
|
}
|
|
120
|
-
},
|
|
121
|
-
// build plugin - generate once before build
|
|
122
|
-
{
|
|
45
|
+
}, {
|
|
123
46
|
name: "on-zero:build",
|
|
124
47
|
apply: "build",
|
|
125
48
|
configResolved(config) {
|
|
126
|
-
|
|
49
|
+
dataDir = resolve(config.root, dir);
|
|
127
50
|
},
|
|
128
51
|
async buildStart() {
|
|
129
|
-
options.disableGenerate || (await runGenerate(
|
|
130
|
-
modelsDir,
|
|
131
|
-
generatedDir,
|
|
132
|
-
silent: !0
|
|
133
|
-
}));
|
|
52
|
+
options.disableGenerate || (await runGenerate(!0));
|
|
134
53
|
}
|
|
135
|
-
}];
|
|
54
|
+
}, createOnZeroHmrPlugin(options.hmrInclude)];
|
|
136
55
|
}
|
|
137
|
-
const onZeroHmrPlugin = options =>
|
|
138
|
-
hmrInclude: options?.include,
|
|
139
|
-
disableGenerate: !0
|
|
140
|
-
})[1];
|
|
56
|
+
const onZeroHmrPlugin = options => createOnZeroHmrPlugin(options?.include);
|
|
141
57
|
var vite_plugin_default = onZeroPlugin;
|
|
142
58
|
export { vite_plugin_default as default, onZeroHmrPlugin, onZeroPlugin };
|
|
143
59
|
//# sourceMappingURL=vite-plugin.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["
|
|
1
|
+
{"version":3,"names":["isAbsolute","relative","resolve","generate","createOnZeroHmrPlugin","hmrInclude","hmrPaths","name","apply","enforce","transform","code","id","some","p","includes","test","replace","map","isWithinDirectory","file","dir","rel","startsWith","onZeroPlugin","options","dataDir","modelsDir","queriesDir","runGenerate","silent","after","configResolved","config","root","buildStart","disableGenerate","configureServer","server","handler","watcher","on","onZeroHmrPlugin","include","vite_plugin_default"],"sources":["../../src/vite-plugin.ts"],"sourcesContent":[null],"mappings":"AAAA,SAASA,UAAA,EAAYC,QAAA,EAAUC,OAAA,QAAe;AAE9C,SAASC,QAAA,QAAsC;AAa/C,SAASC,sBAAsBC,UAAA,GAAuB,EAAC,EAAW;EAChE,MAAMC,QAAA,GAAW,CAAC,YAAY,eAAe,aAAa,GAAGD,UAAU;EAEvE,OAAO;IACLE,IAAA,EAAM;IACNC,KAAA,EAAO;IACPC,OAAA,EAAS;IAETC,UAAUC,IAAA,EAAMC,EAAA,EAAI;MAClB,IAAI,GAACN,QAAA,CAASO,IAAA,CAAMC,CAAA,IAAMF,EAAA,CAAGG,QAAA,CAASD,CAAC,CAAC,KAAK,CAAC,UAAUE,IAAA,CAAKJ,EAAE,MAC1DD,IAAA,CAAKI,QAAA,CAAS,4BAA4B,GAE/C,OAAO;QACLJ,IAAA,EAAMA,IAAA,CAAKM,OAAA,CACT,sFACA,wCACF;QACAC,GAAA,EAAK;MACP;IACF;EACF;AACF;AAEA,SAASC,kBAAkBC,IAAA,EAAcC,GAAA,EAAsB;EAC7D,MAAMC,GAAA,GAAMrB,QAAA,CAASoB,GAAA,EAAKD,IAAI;EAC9B,OAAOE,GAAA,KAAQ,MAAM,CAACA,GAAA,CAAIC,UAAA,CAAW,IAAI,KAAK,CAACvB,UAAA,CAAWsB,GAAG;AAC/D;AAEO,SAASE,aAAaC,OAAA,GAA+B,CAAC,GAAa;EACxE,MAAMJ,GAAA,GAAMI,OAAA,CAAQJ,GAAA,IAAO;EAE3B,IAAIK,OAAA,EACAC,SAAA,EACAC,UAAA;EAEJ,MAAMC,WAAA,GAAeC,MAAA,IACnB3B,QAAA,CAAS;IACPkB,GAAA,EAAKK,OAAA;IACLK,KAAA,EAAON,OAAA,CAAQM,KAAA;IACfD;EACF,CAAC;EAEH,OAAO,CACL;IACEvB,IAAA,EAAM;IACNC,KAAA,EAAO;IAEPwB,eAAeC,MAAA,EAAQ;MACrBP,OAAA,GAAUxB,OAAA,CAAQ+B,MAAA,CAAOC,IAAA,EAAMb,GAAG,GAClCM,SAAA,GAAYzB,OAAA,CAAQwB,OAAA,EAAS,QAAQ,GACrCE,UAAA,GAAa1B,OAAA,CAAQwB,OAAA,EAAS,SAAS;IACzC;IAEA,MAAMS,WAAA,EAAa;MACZV,OAAA,CAAQW,eAAA,KAAiB,MAAMP,WAAA,CAAY,EAAK;IACvD;IAEAQ,gBAAgBC,MAAA,EAAQ;MACtB,IAAIb,OAAA,CAAQW,eAAA,EAAiB;MAE7B,MAAMG,OAAA,GAAU,MAAOnB,IAAA,IAAiB;QACjC,UAAUJ,IAAA,CAAKI,IAAI,MACpBD,iBAAA,CAAkBC,IAAA,EAAMO,SAAS,KAAKR,iBAAA,CAAkBC,IAAA,EAAMQ,UAAU,OAC1E,MAAMC,WAAA,CAAY,EAAK;MAE3B;MAEAS,MAAA,CAAOE,OAAA,CAAQC,EAAA,CAAG,UAAUF,OAAO,GACnCD,MAAA,CAAOE,OAAA,CAAQC,EAAA,CAAG,OAAOF,OAAO,GAChCD,MAAA,CAAOE,OAAA,CAAQC,EAAA,CAAG,UAAUF,OAAO;IACrC;EACF,GAEA;IACEhC,IAAA,EAAM;IACNC,KAAA,EAAO;IAEPwB,eAAeC,MAAA,EAAQ;MACrBP,OAAA,GAAUxB,OAAA,CAAQ+B,MAAA,CAAOC,IAAA,EAAMb,GAAG;IACpC;IAEA,MAAMc,WAAA,EAAa;MACZV,OAAA,CAAQW,eAAA,KAAiB,MAAMP,WAAA,CAAY,EAAI;IACtD;EACF,GAEAzB,qBAAA,CAAsBqB,OAAA,CAAQpB,UAAU,EAC1C;AACF;AAEO,MAAMqC,eAAA,GAAmBjB,OAAA,IACvBrB,qBAAA,CAAsBqB,OAAA,EAASkB,OAAO;AAG/C,IAAOC,mBAAA,GAAQpB,YAAA","ignoreList":[]}
|
|
@@ -1,180 +1,70 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
3
|
-
|
|
4
|
-
var
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
imports = modelNames.map(function (name) {
|
|
20
|
-
return `import * as ${getImportName(name)} from '../models/${name}'`;
|
|
21
|
-
}).join(`
|
|
22
|
-
`),
|
|
23
|
-
sortedByImportName = [...modelNames].sort(function (a, b) {
|
|
24
|
-
return getImportName(a).localeCompare(getImportName(b));
|
|
25
|
-
}),
|
|
26
|
-
modelsObj = `export const models = {
|
|
27
|
-
${sortedByImportName.map(function (name) {
|
|
28
|
-
return ` ${getImportName(name)},`;
|
|
29
|
-
}).join(`
|
|
30
|
-
`)}
|
|
31
|
-
}`,
|
|
32
|
-
hmrBoundary = `
|
|
33
|
-
if (import.meta.hot) {
|
|
34
|
-
import.meta.hot.accept()
|
|
35
|
-
}
|
|
36
|
-
`;
|
|
37
|
-
return `// auto-generated by on-zero vite plugin
|
|
38
|
-
${imports}
|
|
39
|
-
|
|
40
|
-
${modelsObj}
|
|
41
|
-
${hmrBoundary}`;
|
|
42
|
-
}
|
|
43
|
-
function generateTypesFile(modelFiles) {
|
|
44
|
-
var modelNames = modelFiles.map(function (f) {
|
|
45
|
-
return basename(f, ".ts");
|
|
46
|
-
}).sort(),
|
|
47
|
-
getSchemaName = function (name) {
|
|
48
|
-
return name === "user" ? "userPublic" : name;
|
|
49
|
-
},
|
|
50
|
-
typeExports = modelNames.map(function (name) {
|
|
51
|
-
var pascalName = name.charAt(0).toUpperCase() + name.slice(1),
|
|
52
|
-
schemaName = getSchemaName(name);
|
|
53
|
-
return `export type ${pascalName} = TableInsertRow<typeof schema.${schemaName}>
|
|
54
|
-
export type ${pascalName}Update = TableUpdateRow<typeof schema.${schemaName}>`;
|
|
55
|
-
}).join(`
|
|
56
|
-
|
|
57
|
-
`);
|
|
58
|
-
return `import type { TableInsertRow, TableUpdateRow } from 'on-zero'
|
|
59
|
-
import type * as schema from './tables'
|
|
60
|
-
|
|
61
|
-
${typeExports}
|
|
62
|
-
`;
|
|
63
|
-
}
|
|
64
|
-
function generateTablesFile(modelFiles) {
|
|
65
|
-
var modelNames = modelFiles.map(function (f) {
|
|
66
|
-
return basename(f, ".ts");
|
|
67
|
-
}).sort(),
|
|
68
|
-
getExportName = function (name) {
|
|
69
|
-
return name === "user" ? "userPublic" : name;
|
|
70
|
-
},
|
|
71
|
-
exports = modelNames.map(function (name) {
|
|
72
|
-
return `export { schema as ${getExportName(name)} } from '../models/${name}'`;
|
|
73
|
-
}).join(`
|
|
74
|
-
`);
|
|
75
|
-
return `// auto-generated by on-zero vite plugin
|
|
76
|
-
|
|
77
|
-
${exports}
|
|
78
|
-
`;
|
|
1
|
+
import { isAbsolute, relative, resolve } from "path";
|
|
2
|
+
import { generate } from "./generate.native.js";
|
|
3
|
+
function createOnZeroHmrPlugin() {
|
|
4
|
+
var hmrInclude = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : [],
|
|
5
|
+
hmrPaths = ["/models/", "/generated/", "/queries/", ...hmrInclude];
|
|
6
|
+
return {
|
|
7
|
+
name: "on-zero:hmr",
|
|
8
|
+
apply: "serve",
|
|
9
|
+
enforce: "post",
|
|
10
|
+
transform(code, id) {
|
|
11
|
+
if (!(!hmrPaths.some(function (p) {
|
|
12
|
+
return id.includes(p);
|
|
13
|
+
}) || !/\.tsx?$/.test(id)) && code.includes("import.meta.hot.invalidate")) return {
|
|
14
|
+
code: code.replace(/if\s*\(invalidateMessage\)\s*import\.meta\.hot\.invalidate\(invalidateMessage\);?/g, "/* on-zero: HMR invalidate disabled */"),
|
|
15
|
+
map: null
|
|
16
|
+
};
|
|
17
|
+
}
|
|
18
|
+
};
|
|
79
19
|
}
|
|
80
|
-
|
|
81
|
-
var
|
|
82
|
-
|
|
83
|
-
generatedDir,
|
|
84
|
-
silent
|
|
85
|
-
} = options;
|
|
86
|
-
existsSync(generatedDir) || mkdirSync(generatedDir, {
|
|
87
|
-
recursive: !0
|
|
88
|
-
});
|
|
89
|
-
var allModelFiles = readdirSync(modelsDir).filter(function (f) {
|
|
90
|
-
return f.endsWith(".ts");
|
|
91
|
-
}).sort(),
|
|
92
|
-
filesWithSchema = allModelFiles.filter(function (f) {
|
|
93
|
-
return readFileSync(resolve(modelsDir, f), "utf-8").includes("export const schema = table(");
|
|
94
|
-
}),
|
|
95
|
-
writeResults = [writeFileIfChanged(resolve(generatedDir, "models.ts"), generateModelsFile(allModelFiles)), writeFileIfChanged(resolve(generatedDir, "types.ts"), generateTypesFile(filesWithSchema)), writeFileIfChanged(resolve(generatedDir, "tables.ts"), generateTablesFile(filesWithSchema))],
|
|
96
|
-
filesChanged = writeResults.filter(Boolean).length;
|
|
97
|
-
return filesChanged > 0 && !silent && console.info(`[on-zero] generated ${filesChanged} file(s)`), filesChanged;
|
|
20
|
+
function isWithinDirectory(file, dir) {
|
|
21
|
+
var rel = relative(dir, file);
|
|
22
|
+
return rel !== "" && !rel.startsWith("..") && !isAbsolute(rel);
|
|
98
23
|
}
|
|
99
24
|
function onZeroPlugin() {
|
|
100
25
|
var options = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : {},
|
|
101
|
-
|
|
102
|
-
|
|
26
|
+
_options_dir,
|
|
27
|
+
dir = (_options_dir = options.dir) !== null && _options_dir !== void 0 ? _options_dir : "src/data",
|
|
28
|
+
dataDir,
|
|
103
29
|
modelsDir,
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
30
|
+
queriesDir,
|
|
31
|
+
runGenerate = function (silent) {
|
|
32
|
+
return generate({
|
|
33
|
+
dir: dataDir,
|
|
34
|
+
after: options.after,
|
|
35
|
+
silent
|
|
36
|
+
});
|
|
37
|
+
};
|
|
38
|
+
return [{
|
|
39
|
+
name: "on-zero:serve",
|
|
109
40
|
apply: "serve",
|
|
110
41
|
configResolved(config) {
|
|
111
|
-
|
|
42
|
+
dataDir = resolve(config.root, dir), modelsDir = resolve(dataDir, "models"), queriesDir = resolve(dataDir, "queries");
|
|
112
43
|
},
|
|
113
44
|
async buildStart() {
|
|
114
|
-
options.disableGenerate || (await runGenerate(
|
|
115
|
-
modelsDir,
|
|
116
|
-
generatedDir,
|
|
117
|
-
silent: !1
|
|
118
|
-
}));
|
|
45
|
+
options.disableGenerate || (await runGenerate(!1));
|
|
119
46
|
},
|
|
120
47
|
configureServer(server) {
|
|
121
|
-
options.disableGenerate
|
|
122
|
-
|
|
123
|
-
modelsDir,
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
}), server.watcher.on("add", async function (file) {
|
|
128
|
-
file.includes(modelsDir) && (await runGenerate({
|
|
129
|
-
modelsDir,
|
|
130
|
-
generatedDir,
|
|
131
|
-
silent: !1
|
|
132
|
-
}));
|
|
133
|
-
}), server.watcher.on("unlink", async function (file) {
|
|
134
|
-
file.includes(modelsDir) && (await runGenerate({
|
|
135
|
-
modelsDir,
|
|
136
|
-
generatedDir,
|
|
137
|
-
silent: !1
|
|
138
|
-
}));
|
|
139
|
-
}));
|
|
140
|
-
}
|
|
141
|
-
},
|
|
142
|
-
// HMR plugin - removes invalidate calls to prevent cascade
|
|
143
|
-
{
|
|
144
|
-
name: "on-zero:hmr",
|
|
145
|
-
apply: "serve",
|
|
146
|
-
enforce: "post",
|
|
147
|
-
transform(code, id) {
|
|
148
|
-
var shouldTransform = hmrPaths.some(function (p) {
|
|
149
|
-
return id.includes(p);
|
|
150
|
-
}) && /\.tsx?$/.test(id);
|
|
151
|
-
if (shouldTransform && code.includes("import.meta.hot.invalidate")) return {
|
|
152
|
-
code: code.replace(/if\s*\(invalidateMessage\)\s*import\.meta\.hot\.invalidate\(invalidateMessage\);?/g, "/* on-zero: HMR invalidate disabled */"),
|
|
153
|
-
map: null
|
|
154
|
-
};
|
|
48
|
+
if (!options.disableGenerate) {
|
|
49
|
+
var handler = async function (file) {
|
|
50
|
+
/\.tsx?$/.test(file) && (isWithinDirectory(file, modelsDir) || isWithinDirectory(file, queriesDir)) && (await runGenerate(!1));
|
|
51
|
+
};
|
|
52
|
+
server.watcher.on("change", handler), server.watcher.on("add", handler), server.watcher.on("unlink", handler);
|
|
53
|
+
}
|
|
155
54
|
}
|
|
156
|
-
},
|
|
157
|
-
// build plugin - generate once before build
|
|
158
|
-
{
|
|
55
|
+
}, {
|
|
159
56
|
name: "on-zero:build",
|
|
160
57
|
apply: "build",
|
|
161
58
|
configResolved(config) {
|
|
162
|
-
|
|
59
|
+
dataDir = resolve(config.root, dir);
|
|
163
60
|
},
|
|
164
61
|
async buildStart() {
|
|
165
|
-
options.disableGenerate || (await runGenerate(
|
|
166
|
-
modelsDir,
|
|
167
|
-
generatedDir,
|
|
168
|
-
silent: !0
|
|
169
|
-
}));
|
|
62
|
+
options.disableGenerate || (await runGenerate(!0));
|
|
170
63
|
}
|
|
171
|
-
}];
|
|
64
|
+
}, createOnZeroHmrPlugin(options.hmrInclude)];
|
|
172
65
|
}
|
|
173
66
|
var onZeroHmrPlugin = function (options) {
|
|
174
|
-
return
|
|
175
|
-
hmrInclude: options?.include,
|
|
176
|
-
disableGenerate: !0
|
|
177
|
-
})[1];
|
|
67
|
+
return createOnZeroHmrPlugin(options?.include);
|
|
178
68
|
},
|
|
179
69
|
vite_plugin_default = onZeroPlugin;
|
|
180
70
|
export { vite_plugin_default as default, onZeroHmrPlugin, onZeroPlugin };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["
|
|
1
|
+
{"version":3,"names":["isAbsolute","relative","resolve","generate","createOnZeroHmrPlugin","hmrInclude","arguments","length","hmrPaths","name","apply","enforce","transform","code","id","some","p","includes","test","replace","map","isWithinDirectory","file","dir","rel","startsWith","onZeroPlugin","options","_options_dir","dataDir","modelsDir","queriesDir","runGenerate","silent","after","configResolved","config","root","buildStart","disableGenerate","configureServer","server","handler","watcher","on"],"sources":["../../src/vite-plugin.ts"],"sourcesContent":[null],"mappings":"AAAA,SAASA,UAAA,EAAYC,QAAA,EAAUC,OAAA,QAAe;AAE9C,SAASC,QAAA,QAAsC;AAa/C,SAASC,sBAAA,EAAsB;EAC7B,IAAAC,UAAM,GAAWC,SAAC,CAAAC,MAAY,QAAAD,SAAe,QAAa,KAAG,IAAAA,SAAU;IAAAE,QAAA,IAEvE,UAAO,EACL,aAAM,EACN,WAAO,EACP,GAAAH,UAAS;EAGP;IAGAI,IAAA,eAAO;IAAAC,KAAA,EACL,OAAM;IAAKC,OAAA,EACT;IAAAC,SACAA,CAAAC,IAAA,EAAAC,EAAA;MAAA,IACF,GAAAN,QAAA,CAAAO,IAAA,WAAAC,CAAA;QAAA,OACKF,EAAA,CAAAG,QAAA,CAAAD,CAAA;MAAA,EACP,eAAAE,IAAA,CAAAJ,EAAA,MAAAD,IAAA,CAAAI,QAAA,gCACF;QACFJ,IAAA,EAAAA,IAAA,CAAAM,OAAA;QACFC,GAAA;MAEA,CAAS;IACP;EACA;AACF;AAEO,SAASC,iBAAaA,CAAAC,IAAA,EAAgCC,GAAa;EACxE,IAAAC,GAAM,GAAAvB,QAAM,CAAAsB,GAAQ,EAAAD,IAAO;EAE3B,OAAIE,GAAA,KACA,OAAAA,GACA,CAAAC,UAAA,WAAAzB,UAAA,CAAAwB,GAAA;AAEJ;AACW,SACFE,aAAA;EAAA,IACLC,OAAO,GAAArB,SAAQ,CAAAC,MAAA,QAAAD,SAAA,iBAAAA,SAAA;IAAAsB,YAAA;IAAAL,GAAA,IAAAK,YAAA,GAAAD,OAAA,CAAAJ,GAAA,cAAAK,YAAA,cAAAA,YAAA;IAAAC,OAAA;IAAAC,SAAA;IAAAC,UAAA;IAAAC,WAAA,YAAAA,CAAAC,MAAA;MACf,OAAA9B,QAAA;QACDoB,GAAA,EAAAM,OAAA;QAEHK,KAAO,EAAAP,OAAA,CAAAO,KAAA;QACLD;MAAA,EACE;IAAM;EACC,OAEP,CACE;IAGFxB,IAAA;IAEAC,KAAA,EAAM;IACJyB,cAAaA,CAAAC,MAAA;MACfP,OAAA,GAAA3B,OAAA,CAAAkC,MAAA,CAAAC,IAAA,EAAAd,GAAA,GAAAO,SAAA,GAAA5B,OAAA,CAAA2B,OAAA,aAAAE,UAAA,GAAA7B,OAAA,CAAA2B,OAAA;IAEA;IACE,MAAIS,UAAQA,CAAA;MAEZX,OAAM,CAAAY,eAAiB,WAAiBP,WAAA;IACtC;IAEyBQ,eAE3BA,CAAAC,MAAA;MAEA,KAAAd,OAAO,CAAAY,eAAqB;QAG9B,IAAAG,OAAA,kBAAAA,CAAApB,IAAA;UACF,UAAAJ,IAAA,CAAAI,IAAA,MAAAD,iBAAA,CAAAC,IAAA,EAAAQ,SAAA,KAAAT,iBAAA,CAAAC,IAAA,EAAAS,UAAA,aAAAC,WAAA;QAEA;QACES,MAAM,CAAAE,OAAA,CAAAC,EAAA,WAAAF,OAAA,GAAAD,MAAA,CAAAE,OAAA,CAAAC,EAAA,QAAAF,OAAA,GAAAD,MAAA,CAAAE,OAAA,CAAAC,EAAA,WAAAF,OAAA;MACN;IAEA;EACE,GAAkC;IAGpCjC,IAAA,EAAM,eAAa;IACjBC,KAAK,SAAQ;IACfyB,eAAAC,MAAA;MACFP,OAAA,GAAA3B,OAAA,CAAAkC,MAAA,CAAAC,IAAA,EAAAd,GAAA;IAEA;IACF,MAAAe,WAAA;MACFX,OAAA,CAAAY,eAAA,WAAAP,WAAA;IAEa;EAIN,G","ignoreList":[]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "on-zero",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.23",
|
|
4
4
|
"description": "A typed layer over @rocicorp/zero with queries, mutations, and permissions",
|
|
5
5
|
"sideEffects": false,
|
|
6
6
|
"source": "src/index.ts",
|
|
@@ -69,7 +69,7 @@
|
|
|
69
69
|
}
|
|
70
70
|
},
|
|
71
71
|
"dependencies": {
|
|
72
|
-
"@take-out/helpers": "0.1.
|
|
72
|
+
"@take-out/helpers": "0.1.23",
|
|
73
73
|
"@sinclair/typebox-codegen": "^0.11.1",
|
|
74
74
|
"chokidar": "^4.0.3",
|
|
75
75
|
"citty": "^0.1.6",
|
package/readme.md
CHANGED
|
@@ -364,35 +364,6 @@ bun on-zero generate ./app/data
|
|
|
364
364
|
bun on-zero generate --after "bun lint:fix"
|
|
365
365
|
```
|
|
366
366
|
|
|
367
|
-
**`on-zero generate-queries <dir>`**
|
|
368
|
-
|
|
369
|
-
generates query validators from TypeScript query functions. this is included in
|
|
370
|
-
`generate` but can be run standalone.
|
|
371
|
-
|
|
372
|
-
- parses exported arrow functions from `.ts` files in the queries directory
|
|
373
|
-
- extracts parameter types using TypeScript compiler API
|
|
374
|
-
- generates valibot schemas using typebox-codegen
|
|
375
|
-
|
|
376
|
-
**example:**
|
|
377
|
-
|
|
378
|
-
```bash
|
|
379
|
-
bun on-zero generate-queries src/data/queries
|
|
380
|
-
```
|
|
381
|
-
|
|
382
|
-
### what gets generated
|
|
383
|
-
|
|
384
|
-
**models.ts:**
|
|
385
|
-
|
|
386
|
-
```ts
|
|
387
|
-
import * as channel from '~/data/models/channel'
|
|
388
|
-
import * as message from '~/data/models/message'
|
|
389
|
-
|
|
390
|
-
export const models = {
|
|
391
|
-
channel,
|
|
392
|
-
message,
|
|
393
|
-
}
|
|
394
|
-
```
|
|
395
|
-
|
|
396
367
|
**types.ts:**
|
|
397
368
|
|
|
398
369
|
```ts
|