@oktis-works/database 0.12.0 → 0.13.0
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/connection.d.ts.map +1 -1
- package/dist/connection.js +13 -2
- package/dist/connection.js.map +1 -1
- package/dist/migrations/seed.d.ts +16 -16
- package/dist/migrations/seed.d.ts.map +1 -1
- package/dist/migrations/seed.js +148 -130
- package/dist/migrations/seed.js.map +1 -1
- package/package.json +1 -1
package/dist/connection.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"connection.d.ts","sourceRoot":"","sources":["../src/connection.ts"],"names":[],"mappings":"AAKA,OAAO,QAAQ,MAAM,UAAU,CAAC;AAEhC,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAE1D;;;;;GAKG;AACH,MAAM,MAAM,OAAO,GAAG,QAAQ,CAAC,GAAG,GAAG;IACnC,MAAM,CAAC,CAAC,SAAS,GAAG,EAAE,GAAG,QAAQ,CAAC,GAAG,EAAE,EACrC,KAAK,EAAE,MAAM,EACb,UAAU,CAAC,EAAE,GAAG,EAAE,EAClB,YAAY,CAAC,EAAE,GAAG,GACjB,QAAQ,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;CAC7B,CAAC;AAOF,iKAAiK;AACjK,wBAAgB,KAAK,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAE1C;AAED,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,cAAc,GAAG,OAAO,
|
|
1
|
+
{"version":3,"file":"connection.d.ts","sourceRoot":"","sources":["../src/connection.ts"],"names":[],"mappings":"AAKA,OAAO,QAAQ,MAAM,UAAU,CAAC;AAEhC,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAE1D;;;;;GAKG;AACH,MAAM,MAAM,OAAO,GAAG,QAAQ,CAAC,GAAG,GAAG;IACnC,MAAM,CAAC,CAAC,SAAS,GAAG,EAAE,GAAG,QAAQ,CAAC,GAAG,EAAE,EACrC,KAAK,EAAE,MAAM,EACb,UAAU,CAAC,EAAE,GAAG,EAAE,EAClB,YAAY,CAAC,EAAE,GAAG,GACjB,QAAQ,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;CAC7B,CAAC;AAOF,iKAAiK;AACjK,wBAAgB,KAAK,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAE1C;AAED,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,cAAc,GAAG,OAAO,CA+ChE;AAED,wBAAgB,aAAa,IAAI,OAAO,CAGvC;AAED,qFAAqF;AACrF,wBAAgB,iBAAiB,IAAI,OAAO,CAE3C;AAED;;;;GAIG;AACH,wBAAsB,wBAAwB,CAAC,CAAC,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAOpG;AAED,8EAA8E;AAC9E,wBAAgB,yBAAyB,IAAI,OAAO,CAEnD;AAED,wBAAgB,SAAS,IAAI,cAAc,CAAC,QAAQ,CAAC,CAAoB;AAEzE,wBAAsB,eAAe,IAAI,OAAO,CAAC,IAAI,CAAC,CAKrD;AAED,wBAAsB,WAAW,IAAI,OAAO,CAAC,OAAO,CAAC,CAQpD"}
|
package/dist/connection.js
CHANGED
|
@@ -29,9 +29,14 @@ export function createConnection(config) {
|
|
|
29
29
|
password: config.password,
|
|
30
30
|
ssl: config.ssl,
|
|
31
31
|
max: config.maxConnections,
|
|
32
|
-
idle_timeout:
|
|
32
|
+
idle_timeout: 60,
|
|
33
33
|
connect_timeout: 10,
|
|
34
|
+
max_lifetime: 60 * 30,
|
|
34
35
|
transform: { undefined: null },
|
|
36
|
+
onnotice: (notice) => {
|
|
37
|
+
if (notice['severity'] === 'WARNING')
|
|
38
|
+
console.warn('[postgres]', notice['message']);
|
|
39
|
+
},
|
|
35
40
|
});
|
|
36
41
|
if (config.replica?.enabled) {
|
|
37
42
|
_replicaSql = postgres({
|
|
@@ -42,8 +47,14 @@ export function createConnection(config) {
|
|
|
42
47
|
password: config.password,
|
|
43
48
|
ssl: config.ssl,
|
|
44
49
|
max: config.maxConnections,
|
|
45
|
-
idle_timeout:
|
|
50
|
+
idle_timeout: 60,
|
|
46
51
|
connect_timeout: 10,
|
|
52
|
+
max_lifetime: 60 * 30,
|
|
53
|
+
transform: { undefined: null },
|
|
54
|
+
onnotice: (notice) => {
|
|
55
|
+
if (notice['severity'] === 'WARNING')
|
|
56
|
+
console.warn('[postgres]', notice['message']);
|
|
57
|
+
},
|
|
47
58
|
});
|
|
48
59
|
}
|
|
49
60
|
return _sql;
|
package/dist/connection.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"connection.js","sourceRoot":"","sources":["../src/connection.ts"],"names":[],"mappings":"AAAA,0FAA0F;AAC1F,sEAAsE;AACtE,oFAAoF;AACpF,wGAAwG;AAExG,OAAO,QAAQ,MAAM,UAAU,CAAC;AAChC,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AAiBrD,IAAI,IAAI,GAAmB,IAAI,CAAC;AAChC,IAAI,WAAW,GAAmB,IAAI,CAAC;AACvC,IAAI,OAAO,GAA6B,UAAU,CAAC;AACnD,MAAM,iBAAiB,GAAG,IAAI,iBAAiB,EAAW,CAAC;AAE3D,iKAAiK;AACjK,MAAM,UAAU,KAAK,CAAC,IAAY;IAChC,OAAO,IAAI,CAAC,OAAO,CAAC,gBAAgB,EAAE,EAAE,CAAC,CAAC;AAC5C,CAAC;AAED,MAAM,UAAU,gBAAgB,CAAC,MAAsB;IACrD,IAAI,IAAI;QAAE,OAAO,IAAI,CAAC;IACtB,OAAO,GAAG,MAAM,CAAC,MAAM,CAAC;IAExB,IAAI,MAAM,CAAC,MAAM,KAAK,OAAO,EAAE,CAAC;QAC9B,8EAA8E;QAC9E,kFAAkF;QAClF,OAAO,CAAC,IAAI,CAAC,uIAAuI,CAAC,CAAC;IACxJ,CAAC;IAED,IAAI,GAAG,QAAQ,CAAC;QACd,IAAI,EAAE,MAAM,CAAC,IAAI;QACjB,IAAI,EAAE,MAAM,CAAC,IAAI;QACjB,QAAQ,EAAE,MAAM,CAAC,QAAQ;QACzB,QAAQ,EAAE,MAAM,CAAC,IAAI;QACrB,QAAQ,EAAE,MAAM,CAAC,QAAQ;QACzB,GAAG,EAAE,MAAM,CAAC,GAAG;QACf,GAAG,EAAE,MAAM,CAAC,cAAc;QAC1B,YAAY,EAAE,EAAE;QAChB,eAAe,EAAE,EAAE;QACnB,SAAS,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE;
|
|
1
|
+
{"version":3,"file":"connection.js","sourceRoot":"","sources":["../src/connection.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,56 +1,56 @@
|
|
|
1
1
|
import type postgres from 'postgres';
|
|
2
2
|
type Sql = postgres.Sql;
|
|
3
|
-
/**
|
|
3
|
+
/** Canonical roles — MUST match the slugs of auth's DEFAULT_POLICY. */
|
|
4
4
|
export declare const DEFAULT_ROLES: readonly [{
|
|
5
5
|
readonly name: "Super Admin";
|
|
6
6
|
readonly slug: "SUPER_ADMIN";
|
|
7
7
|
}, {
|
|
8
|
-
readonly name: "
|
|
8
|
+
readonly name: "Administrator";
|
|
9
9
|
readonly slug: "TENANT_ADMIN";
|
|
10
10
|
}, {
|
|
11
11
|
readonly name: "Editor";
|
|
12
12
|
readonly slug: "EDITOR";
|
|
13
13
|
}, {
|
|
14
|
-
readonly name: "
|
|
14
|
+
readonly name: "Author";
|
|
15
15
|
readonly slug: "AUTHOR";
|
|
16
16
|
}, {
|
|
17
|
-
readonly name: "
|
|
17
|
+
readonly name: "Reader";
|
|
18
18
|
readonly slug: "VIEWER";
|
|
19
19
|
}];
|
|
20
|
-
/**
|
|
20
|
+
/** Initial settings of the `general` group (admin Settings → General form). */
|
|
21
21
|
export declare const DEFAULT_SETTINGS: readonly [{
|
|
22
22
|
readonly key: "siteTitle";
|
|
23
|
-
readonly value: "
|
|
23
|
+
readonly value: "My Site";
|
|
24
24
|
readonly type: "string";
|
|
25
25
|
}, {
|
|
26
26
|
readonly key: "siteDescription";
|
|
27
|
-
readonly value: "
|
|
27
|
+
readonly value: "A brand new site built with OkCMS";
|
|
28
28
|
readonly type: "string";
|
|
29
29
|
}, {
|
|
30
30
|
readonly key: "language";
|
|
31
|
-
readonly value: "
|
|
31
|
+
readonly value: "en";
|
|
32
32
|
readonly type: "string";
|
|
33
33
|
}, {
|
|
34
34
|
readonly key: "timezone";
|
|
35
|
-
readonly value: "
|
|
35
|
+
readonly value: "UTC";
|
|
36
36
|
readonly type: "string";
|
|
37
37
|
}];
|
|
38
|
-
/**
|
|
38
|
+
/** Creates (if missing) the policy's global roles (tenant_id NULL). Returns the created count. */
|
|
39
39
|
export declare function seedDefaultRoles(sql?: Sql): Promise<number>;
|
|
40
|
-
/**
|
|
40
|
+
/** Creates (if missing) the initial settings in the given tenant. Returns the created count. */
|
|
41
41
|
export declare function seedDefaultSettings(tenantId: string, sql?: Sql): Promise<number>;
|
|
42
42
|
/**
|
|
43
43
|
* Seed completo (roles + settings do tenant default). Idempotente — usar em
|
|
44
|
-
* `db:migrate`/`seed`
|
|
44
|
+
* the CLI's `db:migrate`/`seed` and as a fallback on first-user registration.
|
|
45
45
|
*/
|
|
46
46
|
export declare function seedCoreData(sql?: Sql): Promise<{
|
|
47
47
|
roles: number;
|
|
48
48
|
settings: number;
|
|
49
49
|
}>;
|
|
50
50
|
/**
|
|
51
|
-
*
|
|
52
|
-
*
|
|
53
|
-
*
|
|
51
|
+
* Demo content seed (pages, posts, menus, reading settings).
|
|
52
|
+
* Idempotent: ON CONFLICT on content (tenant_id, type, slug), menus (tenant_id, slug),
|
|
53
|
+
* and settings (key, tenant_id).
|
|
54
54
|
*/
|
|
55
55
|
export declare function seedDemoContent(sql?: Sql): Promise<{
|
|
56
56
|
pages: number;
|
|
@@ -58,7 +58,7 @@ export declare function seedDemoContent(sql?: Sql): Promise<{
|
|
|
58
58
|
menus: number;
|
|
59
59
|
readingSettings: number;
|
|
60
60
|
}>;
|
|
61
|
-
/**
|
|
61
|
+
/** Activates the default theme when no active theme exists yet. */
|
|
62
62
|
export declare function seedActivateDefaultTheme(sql?: Sql): Promise<void>;
|
|
63
63
|
export {};
|
|
64
64
|
//# sourceMappingURL=seed.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"seed.d.ts","sourceRoot":"","sources":["../../src/migrations/seed.ts"],"names":[],"mappings":"AAcA,OAAO,KAAK,QAAQ,MAAM,UAAU,CAAC;AAErC,KAAK,GAAG,GAAG,QAAQ,CAAC,GAAG,CAAC;AAExB,
|
|
1
|
+
{"version":3,"file":"seed.d.ts","sourceRoot":"","sources":["../../src/migrations/seed.ts"],"names":[],"mappings":"AAcA,OAAO,KAAK,QAAQ,MAAM,UAAU,CAAC;AAErC,KAAK,GAAG,GAAG,QAAQ,CAAC,GAAG,CAAC;AAExB,uEAAuE;AACvE,eAAO,MAAM,aAAa;;;;;;;;;;;;;;;EAMhB,CAAC;AAEX,+EAA+E;AAC/E,eAAO,MAAM,gBAAgB;;;;;;;;;;;;;;;;EAKnB,CAAC;AAEX,kGAAkG;AAClG,wBAAsB,gBAAgB,CAAC,GAAG,GAAE,GAAqB,GAAG,OAAO,CAAC,MAAM,CAAC,CAgBlF;AAED,gGAAgG;AAChG,wBAAsB,mBAAmB,CACvC,QAAQ,EAAE,MAAM,EAChB,GAAG,GAAE,GAAqB,GACzB,OAAO,CAAC,MAAM,CAAC,CAejB;AAED;;;GAGG;AACH,wBAAsB,YAAY,CAChC,GAAG,GAAE,GAAqB,GACzB,OAAO,CAAC;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,CAAC,CAK9C;AAwBD;;;;GAIG;AACH,wBAAsB,eAAe,CACnC,GAAG,GAAE,GAAqB,GACzB,OAAO,CAAC;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,eAAe,EAAE,MAAM,CAAA;CAAE,CAAC,CAgUnF;AAED,mEAAmE;AACnE,wBAAsB,wBAAwB,CAC5C,GAAG,GAAE,GAAqB,GACzB,OAAO,CAAC,IAAI,CAAC,CA+Bf"}
|
package/dist/migrations/seed.js
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
// @oktis-works/database -
|
|
1
|
+
// @oktis-works/database - Default data seeds (roles + settings)
|
|
2
2
|
//
|
|
3
3
|
// - As 5 roles do DEFAULT_POLICY do @oktis-works/auth precisam EXISTIR no
|
|
4
|
-
//
|
|
5
|
-
//
|
|
6
|
-
// (
|
|
4
|
+
// database: the JWT carries only the slugs (read from roles via tenant_users); without
|
|
5
|
+
// the role row the user is born roleless → 403 on every protected route
|
|
6
|
+
// (they could register and log in, but could do nothing).
|
|
7
7
|
// - Settings do grupo `general` para o admin ter o que editar (a tabela
|
|
8
8
|
// nasce vazia).
|
|
9
9
|
//
|
|
@@ -11,28 +11,28 @@
|
|
|
11
11
|
// roles via WHERE NOT EXISTS, settings via ON CONFLICT (UNIQUE(key,tenant)).
|
|
12
12
|
import { getConnection } from '../connection.js';
|
|
13
13
|
import { resolveTenantId } from './bootstrap.js';
|
|
14
|
-
/**
|
|
14
|
+
/** Canonical roles — MUST match the slugs of auth's DEFAULT_POLICY. */
|
|
15
15
|
export const DEFAULT_ROLES = [
|
|
16
16
|
{ name: 'Super Admin', slug: 'SUPER_ADMIN' },
|
|
17
|
-
{ name: '
|
|
17
|
+
{ name: 'Administrator', slug: 'TENANT_ADMIN' },
|
|
18
18
|
{ name: 'Editor', slug: 'EDITOR' },
|
|
19
|
-
{ name: '
|
|
20
|
-
{ name: '
|
|
19
|
+
{ name: 'Author', slug: 'AUTHOR' },
|
|
20
|
+
{ name: 'Reader', slug: 'VIEWER' },
|
|
21
21
|
];
|
|
22
|
-
/**
|
|
22
|
+
/** Initial settings of the `general` group (admin Settings → General form). */
|
|
23
23
|
export const DEFAULT_SETTINGS = [
|
|
24
|
-
{ key: 'siteTitle', value: '
|
|
25
|
-
{ key: 'siteDescription', value: '
|
|
26
|
-
{ key: 'language', value: '
|
|
27
|
-
{ key: 'timezone', value: '
|
|
24
|
+
{ key: 'siteTitle', value: 'My Site', type: 'string' },
|
|
25
|
+
{ key: 'siteDescription', value: 'A brand new site built with OkCMS', type: 'string' },
|
|
26
|
+
{ key: 'language', value: 'en', type: 'string' },
|
|
27
|
+
{ key: 'timezone', value: 'UTC', type: 'string' },
|
|
28
28
|
];
|
|
29
|
-
/**
|
|
29
|
+
/** Creates (if missing) the policy's global roles (tenant_id NULL). Returns the created count. */
|
|
30
30
|
export async function seedDefaultRoles(sql = getConnection()) {
|
|
31
31
|
let inserted = 0;
|
|
32
32
|
for (const role of DEFAULT_ROLES) {
|
|
33
|
-
//
|
|
34
|
-
//
|
|
35
|
-
//
|
|
33
|
+
// Explicit cast: $2 appears in two contexts (insert value and
|
|
34
|
+
// column comparison) — without it Postgres deduces different types
|
|
35
|
+
// for the same parameter and fails with "inconsistent types deduced".
|
|
36
36
|
const rows = await sql.unsafe(`INSERT INTO roles (name, slug, is_system, permissions)
|
|
37
37
|
SELECT $1::varchar, $2::varchar, true, '[]'::jsonb
|
|
38
38
|
WHERE NOT EXISTS (SELECT 1 FROM roles WHERE slug = $2::varchar AND tenant_id IS NULL)
|
|
@@ -41,12 +41,12 @@ export async function seedDefaultRoles(sql = getConnection()) {
|
|
|
41
41
|
}
|
|
42
42
|
return inserted;
|
|
43
43
|
}
|
|
44
|
-
/**
|
|
44
|
+
/** Creates (if missing) the initial settings in the given tenant. Returns the created count. */
|
|
45
45
|
export async function seedDefaultSettings(tenantId, sql = getConnection()) {
|
|
46
46
|
let inserted = 0;
|
|
47
47
|
for (const s of DEFAULT_SETTINGS) {
|
|
48
48
|
// RETURNING: sem ele o driver devolve [] mesmo com insert bem-sucedido
|
|
49
|
-
// (
|
|
49
|
+
// (it would count 0 in the log and break idempotency detection).
|
|
50
50
|
const rows = await sql.unsafe(`INSERT INTO settings (tenant_id, key, value, "group", type)
|
|
51
51
|
VALUES ($1, $2, to_jsonb($3::text), 'general', $4)
|
|
52
52
|
ON CONFLICT (key, tenant_id) DO NOTHING
|
|
@@ -57,7 +57,7 @@ export async function seedDefaultSettings(tenantId, sql = getConnection()) {
|
|
|
57
57
|
}
|
|
58
58
|
/**
|
|
59
59
|
* Seed completo (roles + settings do tenant default). Idempotente — usar em
|
|
60
|
-
* `db:migrate`/`seed`
|
|
60
|
+
* the CLI's `db:migrate`/`seed` and as a fallback on first-user registration.
|
|
61
61
|
*/
|
|
62
62
|
export async function seedCoreData(sql = getConnection()) {
|
|
63
63
|
const roles = await seedDefaultRoles(sql);
|
|
@@ -67,7 +67,7 @@ export async function seedCoreData(sql = getConnection()) {
|
|
|
67
67
|
}
|
|
68
68
|
/** Lorem ipsum curto para campos de texto. */
|
|
69
69
|
const LOREM_IPSUM = 'Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.';
|
|
70
|
-
/**
|
|
70
|
+
/** Long lorem ipsum for post/page content. */
|
|
71
71
|
const LOREM_LONG = `
|
|
72
72
|
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.
|
|
73
73
|
|
|
@@ -75,7 +75,7 @@ Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu
|
|
|
75
75
|
|
|
76
76
|
Sed ut perspiciatis unde omnis iste natus error sit voluptatem accusantium doloremque laudantium, totam rem aperiam, eaque ipsa quae ab illo inventore veritatis et quasi architecto beatae vitae dicta sunt explicabo.
|
|
77
77
|
`;
|
|
78
|
-
/**
|
|
78
|
+
/** Default editor body structure (blocks + rendered html). */
|
|
79
79
|
function makeBody(html, blocks = []) {
|
|
80
80
|
return {
|
|
81
81
|
html,
|
|
@@ -85,12 +85,36 @@ function makeBody(html, blocks = []) {
|
|
|
85
85
|
};
|
|
86
86
|
}
|
|
87
87
|
/**
|
|
88
|
-
*
|
|
89
|
-
*
|
|
90
|
-
*
|
|
88
|
+
* Demo content seed (pages, posts, menus, reading settings).
|
|
89
|
+
* Idempotent: ON CONFLICT on content (tenant_id, type, slug), menus (tenant_id, slug),
|
|
90
|
+
* and settings (key, tenant_id).
|
|
91
91
|
*/
|
|
92
92
|
export async function seedDemoContent(sql = getConnection()) {
|
|
93
93
|
const tenantId = await resolveTenantId('default');
|
|
94
|
+
// Clear previous demo data to guarantee idempotency
|
|
95
|
+
await sql.unsafe(`
|
|
96
|
+
DELETE FROM settings WHERE tenant_id = $1 AND "group" = 'reading'
|
|
97
|
+
AND key IN ('static_front_page', 'page_for_posts', 'timezone_string', 'gmt_offset')
|
|
98
|
+
`, [tenantId]);
|
|
99
|
+
await sql.unsafe(`
|
|
100
|
+
DELETE FROM menus WHERE tenant_id = $1 AND slug IN ('header', 'footer')
|
|
101
|
+
`, [tenantId]);
|
|
102
|
+
// Cleanup covers BOTH the current English slugs and the legacy Portuguese
|
|
103
|
+
// ones (pre-i18n seeds), so re-seeding never leaves orphaned demo rows.
|
|
104
|
+
await sql.unsafe(`
|
|
105
|
+
DELETE FROM content WHERE tenant_id = $1 AND slug IN (
|
|
106
|
+
'home', 'about', 'blog', 'first-post', 'getting-started',
|
|
107
|
+
'sobre', 'primeiro-post', 'segundo-post'
|
|
108
|
+
)
|
|
109
|
+
`, [tenantId]);
|
|
110
|
+
await sql.unsafe(`
|
|
111
|
+
DELETE FROM tenant_users WHERE tenant_id = $1 AND user_id IN (
|
|
112
|
+
SELECT id FROM users WHERE email = 'admin@local'
|
|
113
|
+
)
|
|
114
|
+
`, [tenantId]);
|
|
115
|
+
await sql.unsafe(`
|
|
116
|
+
DELETE FROM users WHERE email = 'admin@local'
|
|
117
|
+
`);
|
|
94
118
|
console.log('[seedDemoContent] tenantId:', tenantId);
|
|
95
119
|
// Check if constraint exists
|
|
96
120
|
const constraintCheck = await sql.unsafe(`
|
|
@@ -98,13 +122,13 @@ export async function seedDemoContent(sql = getConnection()) {
|
|
|
98
122
|
WHERE conrelid = 'content'::regclass AND contype = 'u'
|
|
99
123
|
`);
|
|
100
124
|
console.log('[seedDemoContent] constraints on content:', constraintCheck);
|
|
101
|
-
//
|
|
125
|
+
// Default author: first user of the tenant (creates one if none exists)
|
|
102
126
|
const authorResult = await sql.unsafe(`SELECT id FROM users WHERE id IN (SELECT user_id FROM tenant_users WHERE tenant_id = $1) LIMIT 1`, [tenantId]);
|
|
103
127
|
let authorId;
|
|
104
128
|
if (authorResult.length === 0) {
|
|
105
|
-
// Fallback:
|
|
129
|
+
// Fallback: creates an admin user when none exists
|
|
106
130
|
const newUser = await sql.unsafe(`INSERT INTO users (email, name, password_hash, status)
|
|
107
|
-
VALUES ('admin@local', '
|
|
131
|
+
VALUES ('admin@local', 'Administrator', '$2b$10$dummy', 'ACTIVE')
|
|
108
132
|
ON CONFLICT (email) DO UPDATE SET name = EXCLUDED.name RETURNING id`);
|
|
109
133
|
authorId = String(newUser[0]?.['id'] ?? '');
|
|
110
134
|
await sql.unsafe(`INSERT INTO tenant_users (tenant_id, user_id, role_id)
|
|
@@ -115,61 +139,65 @@ export async function seedDemoContent(sql = getConnection()) {
|
|
|
115
139
|
authorId = String(authorResult[0]?.['id'] ?? '');
|
|
116
140
|
}
|
|
117
141
|
const now = new Date();
|
|
118
|
-
// ----
|
|
142
|
+
// ---- PAGES ----
|
|
119
143
|
const pages = [
|
|
120
144
|
{
|
|
121
145
|
type: 'page',
|
|
122
146
|
slug: 'home',
|
|
123
|
-
title: '
|
|
124
|
-
excerpt: '
|
|
147
|
+
title: 'Home',
|
|
148
|
+
excerpt: 'Welcome to your brand new OkCMS site.',
|
|
125
149
|
body: makeBody(`
|
|
126
150
|
<section class="hero">
|
|
127
|
-
<
|
|
128
|
-
<
|
|
129
|
-
<
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
<a href="/sobre">Ler mais →</a>
|
|
151
|
+
<p class="hero__kicker">Welcome to OkCMS</p>
|
|
152
|
+
<h1 class="hero__title">Your new site is ready</h1>
|
|
153
|
+
<p class="hero__description">Start publishing in minutes — create pages, posts and menus from the admin dashboard, then make this page your own.</p>
|
|
154
|
+
<div class="hero__actions">
|
|
155
|
+
<a href="/blog" class="btn btn--primary">Go to the blog</a>
|
|
156
|
+
<a href="#contact" class="btn btn--ghost">Get in touch</a>
|
|
157
|
+
</div>
|
|
135
158
|
</section>
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
<
|
|
159
|
+
|
|
160
|
+
<section id="about" class="section about-preview">
|
|
161
|
+
<div>
|
|
162
|
+
<p class="section__kicker">About</p>
|
|
163
|
+
<h2 class="section__title">About Us</h2>
|
|
164
|
+
<p class="section__lead">${LOREM_IPSUM}</p>
|
|
165
|
+
<a class="btn btn--outline" href="/about">Read more →</a>
|
|
166
|
+
</div>
|
|
139
167
|
</section>
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
<p>
|
|
168
|
+
|
|
169
|
+
<section id="contact" class="section contact">
|
|
170
|
+
<p class="section__kicker">Contact</p>
|
|
171
|
+
<h2 class="section__title">Get in Touch</h2>
|
|
172
|
+
<p class="section__lead">Questions, feedback or ideas? Send us an email at <a href="mailto:hello@example.com">hello@example.com</a> — we would love to hear from you.</p>
|
|
143
173
|
</section>
|
|
144
174
|
`, [
|
|
145
|
-
{ type: 'heading', level: 1, content: '
|
|
146
|
-
{ type: 'paragraph', content: '
|
|
147
|
-
{ type: 'heading', level: 2, content: '
|
|
175
|
+
{ type: 'heading', level: 1, content: 'Your new site is ready' },
|
|
176
|
+
{ type: 'paragraph', content: 'Start publishing in minutes — create pages, posts and menus from the admin dashboard, then make this page your own.' },
|
|
177
|
+
{ type: 'heading', level: 2, content: 'About Us' },
|
|
148
178
|
{ type: 'paragraph', content: LOREM_IPSUM },
|
|
149
|
-
{ type: 'heading', level: 2, content: '
|
|
150
|
-
{ type: 'paragraph', content: '
|
|
151
|
-
{ type: 'heading', level: 2, content: 'Entre em Contato' },
|
|
152
|
-
{ type: 'paragraph', content: 'Preencha o formulário ou envie um e-mail para contato@exemplo.com' },
|
|
179
|
+
{ type: 'heading', level: 2, content: 'Get in Touch' },
|
|
180
|
+
{ type: 'paragraph', content: 'Questions, feedback or ideas? Send us an email at hello@example.com — we would love to hear from you.' },
|
|
153
181
|
]),
|
|
154
182
|
},
|
|
155
183
|
{
|
|
156
184
|
type: 'page',
|
|
157
|
-
slug: '
|
|
158
|
-
title: '
|
|
159
|
-
excerpt: '
|
|
185
|
+
slug: 'about',
|
|
186
|
+
title: 'About Us',
|
|
187
|
+
excerpt: 'Learn more about our story and mission.',
|
|
160
188
|
body: makeBody(`
|
|
161
|
-
<h2>
|
|
189
|
+
<h2>Our Story</h2>
|
|
162
190
|
<p>${LOREM_LONG}</p>
|
|
163
|
-
<h2>
|
|
191
|
+
<h2>Our Mission</h2>
|
|
164
192
|
<p>${LOREM_IPSUM}</p>
|
|
165
|
-
<h2>
|
|
193
|
+
<h2>Our Team</h2>
|
|
166
194
|
<p>${LOREM_IPSUM}</p>
|
|
167
195
|
`, [
|
|
168
|
-
{ type: 'heading', level: 2, content: '
|
|
196
|
+
{ type: 'heading', level: 2, content: 'Our Story' },
|
|
169
197
|
{ type: 'paragraph', content: LOREM_LONG },
|
|
170
|
-
{ type: 'heading', level: 2, content: '
|
|
198
|
+
{ type: 'heading', level: 2, content: 'Our Mission' },
|
|
171
199
|
{ type: 'paragraph', content: LOREM_IPSUM },
|
|
172
|
-
{ type: 'heading', level: 2, content: '
|
|
200
|
+
{ type: 'heading', level: 2, content: 'Our Team' },
|
|
173
201
|
{ type: 'paragraph', content: LOREM_IPSUM },
|
|
174
202
|
]),
|
|
175
203
|
},
|
|
@@ -177,13 +205,13 @@ export async function seedDemoContent(sql = getConnection()) {
|
|
|
177
205
|
type: 'page',
|
|
178
206
|
slug: 'blog',
|
|
179
207
|
title: 'Blog',
|
|
180
|
-
excerpt: '
|
|
208
|
+
excerpt: 'Articles, tutorials and release notes.',
|
|
181
209
|
body: makeBody(`
|
|
182
|
-
<p>
|
|
183
|
-
<p>
|
|
210
|
+
<p>Welcome to our blog. Here you will find articles, tutorials and news about OkCMS.</p>
|
|
211
|
+
<p>The latest posts are listed below automatically.</p>
|
|
184
212
|
`, [
|
|
185
|
-
{ type: 'paragraph', content: '
|
|
186
|
-
{ type: 'paragraph', content: '
|
|
213
|
+
{ type: 'paragraph', content: 'Welcome to our blog. Here you will find articles, tutorials and news about OkCMS.' },
|
|
214
|
+
{ type: 'paragraph', content: 'The latest posts are listed below automatically.' },
|
|
187
215
|
]),
|
|
188
216
|
},
|
|
189
217
|
];
|
|
@@ -194,10 +222,12 @@ export async function seedDemoContent(sql = getConnection()) {
|
|
|
194
222
|
let result;
|
|
195
223
|
try {
|
|
196
224
|
// Use CTE-based upsert to avoid constraint caching issues
|
|
225
|
+
// `$5::jsonb` PARSES the serialized document into a jsonb object;
|
|
226
|
+
// `to_jsonb($5::text)` would wrap it as a jsonb string (double-encoded).
|
|
197
227
|
result = await sql.unsafe(`WITH upsert AS (
|
|
198
228
|
UPDATE content
|
|
199
229
|
SET title = $3,
|
|
200
|
-
body =
|
|
230
|
+
body = $5::jsonb,
|
|
201
231
|
excerpt = $6,
|
|
202
232
|
status = 'PUBLISHED',
|
|
203
233
|
author_id = $7,
|
|
@@ -207,7 +237,7 @@ export async function seedDemoContent(sql = getConnection()) {
|
|
|
207
237
|
RETURNING id
|
|
208
238
|
)
|
|
209
239
|
INSERT INTO content (tenant_id, type, title, slug, body, excerpt, status, author_id, published_at, created_at, updated_at)
|
|
210
|
-
SELECT $1, $2, $3, $4,
|
|
240
|
+
SELECT $1, $2, $3, $4, $5::jsonb, $6, 'PUBLISHED', $7, $8, $9, $10
|
|
211
241
|
WHERE NOT EXISTS (SELECT 1 FROM content WHERE tenant_id = $1 AND type = $2 AND slug = $4)
|
|
212
242
|
RETURNING id`, [tenantId, page.type, page.title, page.slug, JSON.stringify(page.body), page.excerpt, authorId, now, now, now]);
|
|
213
243
|
}
|
|
@@ -222,65 +252,65 @@ export async function seedDemoContent(sql = getConnection()) {
|
|
|
222
252
|
const posts = [
|
|
223
253
|
{
|
|
224
254
|
type: 'post',
|
|
225
|
-
slug: '
|
|
226
|
-
title: '
|
|
227
|
-
excerpt: '
|
|
255
|
+
slug: 'first-post',
|
|
256
|
+
title: 'My First Blog Post',
|
|
257
|
+
excerpt: 'This is the first demo post of the blog.',
|
|
228
258
|
body: makeBody(`
|
|
229
|
-
<h1>
|
|
259
|
+
<h1>My First Blog Post</h1>
|
|
230
260
|
<p>${LOREM_IPSUM}</p>
|
|
231
|
-
<h2>
|
|
261
|
+
<h2>Introduction</h2>
|
|
232
262
|
<p>${LOREM_LONG}</p>
|
|
233
|
-
<h2>
|
|
263
|
+
<h2>Main Content</h2>
|
|
234
264
|
<p>${LOREM_IPSUM}</p>
|
|
235
|
-
<h3>
|
|
265
|
+
<h3>Example Subsection</h3>
|
|
236
266
|
<p>${LOREM_IPSUM}</p>
|
|
237
|
-
<h2>
|
|
267
|
+
<h2>Wrapping Up</h2>
|
|
238
268
|
<p>${LOREM_LONG}</p>
|
|
239
269
|
`, [
|
|
240
|
-
{ type: 'heading', level: 1, content: '
|
|
270
|
+
{ type: 'heading', level: 1, content: 'My First Blog Post' },
|
|
241
271
|
{ type: 'paragraph', content: LOREM_IPSUM },
|
|
242
|
-
{ type: 'heading', level: 2, content: '
|
|
272
|
+
{ type: 'heading', level: 2, content: 'Introduction' },
|
|
243
273
|
{ type: 'paragraph', content: LOREM_LONG },
|
|
244
|
-
{ type: 'heading', level: 2, content: '
|
|
274
|
+
{ type: 'heading', level: 2, content: 'Main Content' },
|
|
245
275
|
{ type: 'paragraph', content: LOREM_IPSUM },
|
|
246
|
-
{ type: 'heading', level: 3, content: '
|
|
276
|
+
{ type: 'heading', level: 3, content: 'Example Subsection' },
|
|
247
277
|
{ type: 'paragraph', content: LOREM_IPSUM },
|
|
248
|
-
{ type: 'heading', level: 2, content: '
|
|
278
|
+
{ type: 'heading', level: 2, content: 'Wrapping Up' },
|
|
249
279
|
{ type: 'paragraph', content: LOREM_LONG },
|
|
250
280
|
]),
|
|
251
281
|
},
|
|
252
282
|
{
|
|
253
283
|
type: 'post',
|
|
254
|
-
slug: '
|
|
255
|
-
title: '
|
|
256
|
-
excerpt: '
|
|
284
|
+
slug: 'getting-started',
|
|
285
|
+
title: 'Getting Started with OkCMS',
|
|
286
|
+
excerpt: 'Learn the first steps to build your site with OkCMS.',
|
|
257
287
|
body: makeBody(`
|
|
258
|
-
<h1>
|
|
288
|
+
<h1>Getting Started with OkCMS</h1>
|
|
259
289
|
<p>${LOREM_IPSUM}</p>
|
|
260
|
-
<h2>
|
|
290
|
+
<h2>Installation</h2>
|
|
261
291
|
<p>${LOREM_LONG}</p>
|
|
262
|
-
<h2>
|
|
292
|
+
<h2>Initial Setup</h2>
|
|
263
293
|
<p>${LOREM_IPSUM}</p>
|
|
264
|
-
<h3>
|
|
294
|
+
<h3>Themes</h3>
|
|
265
295
|
<p>${LOREM_IPSUM}</p>
|
|
266
296
|
<h3>Plugins</h3>
|
|
267
297
|
<p>${LOREM_IPSUM}</p>
|
|
268
|
-
<h2>
|
|
298
|
+
<h2>Creating Content</h2>
|
|
269
299
|
<p>${LOREM_LONG}</p>
|
|
270
300
|
<h2>Deploy</h2>
|
|
271
301
|
<p>${LOREM_IPSUM}</p>
|
|
272
302
|
`, [
|
|
273
|
-
{ type: 'heading', level: 1, content: '
|
|
303
|
+
{ type: 'heading', level: 1, content: 'Getting Started with OkCMS' },
|
|
274
304
|
{ type: 'paragraph', content: LOREM_IPSUM },
|
|
275
|
-
{ type: 'heading', level: 2, content: '
|
|
305
|
+
{ type: 'heading', level: 2, content: 'Installation' },
|
|
276
306
|
{ type: 'paragraph', content: LOREM_LONG },
|
|
277
|
-
{ type: 'heading', level: 2, content: '
|
|
307
|
+
{ type: 'heading', level: 2, content: 'Initial Setup' },
|
|
278
308
|
{ type: 'paragraph', content: LOREM_IPSUM },
|
|
279
|
-
{ type: 'heading', level: 3, content: '
|
|
309
|
+
{ type: 'heading', level: 3, content: 'Themes' },
|
|
280
310
|
{ type: 'paragraph', content: LOREM_IPSUM },
|
|
281
311
|
{ type: 'heading', level: 3, content: 'Plugins' },
|
|
282
312
|
{ type: 'paragraph', content: LOREM_IPSUM },
|
|
283
|
-
{ type: 'heading', level: 2, content: '
|
|
313
|
+
{ type: 'heading', level: 2, content: 'Creating Content' },
|
|
284
314
|
{ type: 'paragraph', content: LOREM_LONG },
|
|
285
315
|
{ type: 'heading', level: 2, content: 'Deploy' },
|
|
286
316
|
{ type: 'paragraph', content: LOREM_IPSUM },
|
|
@@ -290,10 +320,13 @@ export async function seedDemoContent(sql = getConnection()) {
|
|
|
290
320
|
let postsCreated = 0;
|
|
291
321
|
for (const post of posts) {
|
|
292
322
|
console.log('[seedDemoContent] Inserting post:', post.slug, 'tenantId:', tenantId, 'authorId:', authorId);
|
|
293
|
-
const result = await sql.unsafe(
|
|
323
|
+
const result = await sql.unsafe(
|
|
324
|
+
// `$5::jsonb` parses (see the pages upsert above) — `to_jsonb($5::text)`
|
|
325
|
+
// would store the document as a double-encoded jsonb string.
|
|
326
|
+
`WITH upsert AS (
|
|
294
327
|
UPDATE content
|
|
295
328
|
SET title = $3,
|
|
296
|
-
body =
|
|
329
|
+
body = $5::jsonb,
|
|
297
330
|
excerpt = $6,
|
|
298
331
|
status = 'PUBLISHED',
|
|
299
332
|
author_id = $7,
|
|
@@ -303,70 +336,55 @@ export async function seedDemoContent(sql = getConnection()) {
|
|
|
303
336
|
RETURNING id
|
|
304
337
|
)
|
|
305
338
|
INSERT INTO content (tenant_id, type, title, slug, body, excerpt, status, author_id, published_at, created_at, updated_at)
|
|
306
|
-
SELECT $1, $2, $3, $4,
|
|
339
|
+
SELECT $1, $2, $3, $4, $5::jsonb, $6, 'PUBLISHED', $7, $8, $9, $10
|
|
307
340
|
WHERE NOT EXISTS (SELECT 1 FROM content WHERE tenant_id = $1 AND type = $2 AND slug = $4)
|
|
308
341
|
RETURNING id`, [tenantId, post.type, post.title, post.slug, JSON.stringify(post.body), post.excerpt, authorId, now, now, now]);
|
|
309
342
|
postsCreated += result.length;
|
|
310
343
|
}
|
|
311
344
|
// ---- MENUS ----
|
|
312
345
|
const headerMenuItems = [
|
|
313
|
-
{ type: 'home', label: '
|
|
314
|
-
{ type: 'page', label: '
|
|
346
|
+
{ type: 'home', label: 'Home', url: '/' },
|
|
347
|
+
{ type: 'page', label: 'About', url: '/about', contentId: pageIds['about'] },
|
|
315
348
|
{ type: 'page', label: 'Blog', url: '/blog', contentId: pageIds['blog'] },
|
|
316
349
|
];
|
|
317
350
|
const footerMenuItems = [
|
|
318
|
-
{ type: 'custom', label: '
|
|
319
|
-
{ type: 'custom', label: '
|
|
351
|
+
{ type: 'custom', label: 'Contact', url: '/#contact' },
|
|
352
|
+
{ type: 'custom', label: 'Privacy', url: '/privacy' },
|
|
320
353
|
];
|
|
321
354
|
let menusCreated = 0;
|
|
322
355
|
for (const [slug, name, items] of [
|
|
323
|
-
['header', 'Menu
|
|
324
|
-
['footer', '
|
|
356
|
+
['header', 'Main Menu', headerMenuItems],
|
|
357
|
+
['footer', 'Footer', footerMenuItems],
|
|
325
358
|
]) {
|
|
326
359
|
console.log('[seedDemoContent] Inserting menu:', slug, 'tenantId:', tenantId);
|
|
327
|
-
const result = await sql.unsafe(`
|
|
328
|
-
|
|
329
|
-
|
|
330
|
-
items = $4::jsonb
|
|
331
|
-
WHERE tenant_id = $1 AND slug = $2
|
|
332
|
-
RETURNING id
|
|
333
|
-
)
|
|
334
|
-
INSERT INTO menus (tenant_id, name, slug, items)
|
|
335
|
-
SELECT $1, $2, $3, $4::jsonb
|
|
336
|
-
WHERE NOT EXISTS (SELECT 1 FROM menus WHERE tenant_id = $1 AND slug = $2)
|
|
337
|
-
RETURNING id`, [tenantId, slug, name, items]);
|
|
360
|
+
const result = await sql.unsafe(`INSERT INTO menus (tenant_id, name, slug, items)
|
|
361
|
+
VALUES ($1, $2, $3, $4::jsonb)
|
|
362
|
+
RETURNING id`, [tenantId, slug, name, items]);
|
|
338
363
|
menusCreated += result.length;
|
|
339
364
|
}
|
|
340
|
-
// ---- SETTINGS
|
|
365
|
+
// ---- READING SETTINGS (Static Front Page) ----
|
|
341
366
|
let readingSettingsCreated = 0;
|
|
342
367
|
if (pageIds['home'] && pageIds['blog']) {
|
|
343
368
|
for (const [key, value] of [
|
|
344
369
|
['static_front_page', pageIds['home']],
|
|
345
370
|
['page_for_posts', pageIds['blog']],
|
|
346
|
-
['timezone_string', '
|
|
347
|
-
['gmt_offset',
|
|
371
|
+
['timezone_string', 'UTC'],
|
|
372
|
+
['gmt_offset', 0],
|
|
348
373
|
]) {
|
|
349
374
|
console.log('[seedDemoContent] Inserting setting:', key, 'tenantId:', tenantId);
|
|
350
|
-
const result = await sql.unsafe(`
|
|
351
|
-
|
|
352
|
-
|
|
353
|
-
WHERE tenant_id = $1 AND key = $2
|
|
354
|
-
RETURNING id
|
|
355
|
-
)
|
|
356
|
-
INSERT INTO settings (tenant_id, key, value, "group", type)
|
|
357
|
-
SELECT $1, $2, to_jsonb($3::text), 'reading', 'string'
|
|
358
|
-
WHERE NOT EXISTS (SELECT 1 FROM settings WHERE tenant_id = $1 AND key = $2)
|
|
359
|
-
RETURNING id`, [tenantId, key, value]);
|
|
375
|
+
const result = await sql.unsafe(`INSERT INTO settings (tenant_id, key, value, "group", type)
|
|
376
|
+
VALUES ($1, $2, to_jsonb($3::text), 'reading', 'string')
|
|
377
|
+
RETURNING id`, [tenantId, key, value]);
|
|
360
378
|
readingSettingsCreated += result.length;
|
|
361
379
|
}
|
|
362
380
|
}
|
|
363
381
|
return { pages: pagesCreated, posts: postsCreated, menus: menusCreated, readingSettings: readingSettingsCreated };
|
|
364
382
|
}
|
|
365
|
-
/**
|
|
383
|
+
/** Activates the default theme when no active theme exists yet. */
|
|
366
384
|
export async function seedActivateDefaultTheme(sql = getConnection()) {
|
|
367
385
|
try {
|
|
368
386
|
const tenantId = await resolveTenantId('default');
|
|
369
|
-
//
|
|
387
|
+
// Check if an active theme already exists
|
|
370
388
|
const activeTheme = await sql.unsafe(`SELECT id FROM themes WHERE status = 'ACTIVE' AND tenant_id = $1 LIMIT 1`, [tenantId]);
|
|
371
389
|
if (activeTheme.length > 0)
|
|
372
390
|
return;
|
|
@@ -381,7 +399,7 @@ export async function seedActivateDefaultTheme(sql = getConnection()) {
|
|
|
381
399
|
}
|
|
382
400
|
}
|
|
383
401
|
catch {
|
|
384
|
-
//
|
|
402
|
+
// Silent — theme activation is best-effort
|
|
385
403
|
}
|
|
386
404
|
}
|
|
387
405
|
//# sourceMappingURL=seed.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"seed.js","sourceRoot":"","sources":["../../src/migrations/seed.ts"],"names":[],"mappings":"AAAA,mEAAmE;AACnE,EAAE;AACF,0EAA0E;AAC1E,6EAA6E;AAC7E,2EAA2E;AAC3E,gDAAgD;AAChD,wEAAwE;AACxE,kBAAkB;AAClB,EAAE;AACF,2EAA2E;AAC3E,6EAA6E;AAE7E,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AACjD,OAAO,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AAKjD,4EAA4E;AAC5E,MAAM,CAAC,MAAM,aAAa,GAAG;IAC3B,EAAE,IAAI,EAAE,aAAa,EAAE,IAAI,EAAE,aAAa,EAAE;IAC5C,EAAE,IAAI,EAAE,eAAe,EAAE,IAAI,EAAE,cAAc,EAAE;IAC/C,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,QAAQ,EAAE;IAClC,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE;IACjC,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,QAAQ,EAAE;CAC1B,CAAC;AAEX,kFAAkF;AAClF,MAAM,CAAC,MAAM,gBAAgB,GAAG;IAC9B,EAAE,GAAG,EAAE,WAAW,EAAE,KAAK,EAAE,UAAU,EAAE,IAAI,EAAE,QAAQ,EAAE;IACvD,EAAE,GAAG,EAAE,iBAAiB,EAAE,KAAK,EAAE,8BAA8B,EAAE,IAAI,EAAE,QAAQ,EAAE;IACjF,EAAE,GAAG,EAAE,UAAU,EAAE,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE;IACnD,EAAE,GAAG,EAAE,UAAU,EAAE,KAAK,EAAE,mBAAmB,EAAE,IAAI,EAAE,QAAQ,EAAE;CACvD,CAAC;AAEX,0FAA0F;AAC1F,MAAM,CAAC,KAAK,UAAU,gBAAgB,CAAC,MAAW,aAAa,EAAE;IAC/D,IAAI,QAAQ,GAAG,CAAC,CAAC;IACjB,KAAK,MAAM,IAAI,IAAI,aAAa,EAAE,CAAC;QACjC,oEAAoE;QACpE,qEAAqE;QACrE,mEAAmE;QACnE,MAAM,IAAI,GAAG,MAAM,GAAG,CAAC,MAAM,CAC3B;;;oBAGc,EACd,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,CACvB,CAAC;QACF,QAAQ,IAAI,IAAI,CAAC,MAAM,CAAC;IAC1B,CAAC;IACD,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED,gFAAgF;AAChF,MAAM,CAAC,KAAK,UAAU,mBAAmB,CACvC,QAAgB,EAChB,MAAW,aAAa,EAAE;IAE1B,IAAI,QAAQ,GAAG,CAAC,CAAC;IACjB,KAAK,MAAM,CAAC,IAAI,gBAAgB,EAAE,CAAC;QACjC,uEAAuE;QACvE,8DAA8D;QAC9D,MAAM,IAAI,GAAG,MAAM,GAAG,CAAC,MAAM,CAC3B;;;oBAGc,EACd,CAAC,QAAQ,EAAE,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,IAAI,CAAC,CACnC,CAAC;QACF,QAAQ,IAAI,IAAI,CAAC,MAAM,CAAC;IAC1B,CAAC;IACD,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,YAAY,CAChC,MAAW,aAAa,EAAE;IAE1B,MAAM,KAAK,GAAG,MAAM,gBAAgB,CAAC,GAAG,CAAC,CAAC;IAC1C,MAAM,QAAQ,GAAG,MAAM,eAAe,CAAC,SAAS,CAAC,CAAC;IAClD,MAAM,QAAQ,GAAG,MAAM,mBAAmB,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC;IAC1D,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC;AAC7B,CAAC;AAED,8CAA8C;AAC9C,MAAM,WAAW,GAAG,6HAA6H,CAAC;AAElJ,wDAAwD;AACxD,MAAM,UAAU,GAAG;;;;;;CAMlB,CAAC;AAEF,sEAAsE;AACtE,SAAS,QAAQ,CAAC,IAAY,EAAE,SAAoB,EAAE;IACpD,OAAO;QACL,IAAI;QACJ,MAAM,EAAE,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC;YACnC,EAAE,IAAI,EAAE,WAAW,EAAE,OAAO,EAAE,IAAI,CAAC,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE;SAC3E;KACF,CAAC;AACJ,CAAC;AAED;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,eAAe,CACnC,MAAW,aAAa,EAAE;IAE1B,MAAM,QAAQ,GAAG,MAAM,eAAe,CAAC,SAAS,CAAC,CAAC;IAClD,OAAO,CAAC,GAAG,CAAC,6BAA6B,EAAE,QAAQ,CAAC,CAAC;IAErD,6BAA6B;IAC7B,MAAM,eAAe,GAAG,MAAM,GAAG,CAAC,MAAM,CAAC;;;GAGxC,CAAC,CAAC;IACH,OAAO,CAAC,GAAG,CAAC,2CAA2C,EAAE,eAAe,CAAC,CAAC;IAE1E,sEAAsE;IACtE,MAAM,YAAY,GAAG,MAAM,GAAG,CAAC,MAAM,CACnC,kGAAkG,EAClG,CAAC,QAAQ,CAAC,CACX,CAAC;IACF,IAAI,QAAgB,CAAC;IACrB,IAAI,YAAY,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC9B,oDAAoD;QACpD,MAAM,OAAO,GAAG,MAAM,GAAG,CAAC,MAAM,CAC9B;;2EAEqE,CACtE,CAAC;QACF,QAAQ,GAAG,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;QAC5C,MAAM,GAAG,CAAC,MAAM,CACd;;mDAE6C,EAC7C,CAAC,QAAQ,EAAE,QAAQ,CAAC,CACrB,CAAC;IACJ,CAAC;SAAM,CAAC;QACN,QAAQ,GAAG,MAAM,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;IACnD,CAAC;IAED,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE,CAAC;IAEvB,oBAAoB;IACpB,MAAM,KAAK,GAAG;QACZ;YACE,IAAI,EAAE,MAAM;YACZ,IAAI,EAAE,MAAM;YACZ,KAAK,EAAE,QAAQ;YACf,OAAO,EAAE,uCAAuC;YAChD,IAAI,EAAE,QAAQ,CAAC;;;;;;;;eAQN,WAAW;;;;;;;;;;;OAWnB,EAAE;gBACD,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC,EAAE,OAAO,EAAE,oBAAoB,EAAE;gBAC5D,EAAE,IAAI,EAAE,WAAW,EAAE,OAAO,EAAE,8CAA8C,EAAE;gBAC9E,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC,EAAE,OAAO,EAAE,WAAW,EAAE;gBACnD,EAAE,IAAI,EAAE,WAAW,EAAE,OAAO,EAAE,WAAW,EAAE;gBAC3C,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC,EAAE,OAAO,EAAE,iBAAiB,EAAE;gBACzD,EAAE,IAAI,EAAE,WAAW,EAAE,OAAO,EAAE,2DAA2D,EAAE;gBAC3F,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC,EAAE,OAAO,EAAE,kBAAkB,EAAE;gBAC1D,EAAE,IAAI,EAAE,WAAW,EAAE,OAAO,EAAE,mEAAmE,EAAE;aACpG,CAAC;SACH;QACD;YACE,IAAI,EAAE,MAAM;YACZ,IAAI,EAAE,OAAO;YACb,KAAK,EAAE,WAAW;YAClB,OAAO,EAAE,kCAAkC;YAC3C,IAAI,EAAE,QAAQ,CAAC;;aAER,UAAU;;aAEV,WAAW;;aAEX,WAAW;OACjB,EAAE;gBACD,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC,EAAE,OAAO,EAAE,gBAAgB,EAAE;gBACxD,EAAE,IAAI,EAAE,WAAW,EAAE,OAAO,EAAE,UAAU,EAAE;gBAC1C,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC,EAAE,OAAO,EAAE,cAAc,EAAE;gBACtD,EAAE,IAAI,EAAE,WAAW,EAAE,OAAO,EAAE,WAAW,EAAE;gBAC3C,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC,EAAE,OAAO,EAAE,QAAQ,EAAE;gBAChD,EAAE,IAAI,EAAE,WAAW,EAAE,OAAO,EAAE,WAAW,EAAE;aAC5C,CAAC;SACH;QACD;YACE,IAAI,EAAE,MAAM;YACZ,IAAI,EAAE,MAAM;YACZ,KAAK,EAAE,MAAM;YACb,OAAO,EAAE,iCAAiC;YAC1C,IAAI,EAAE,QAAQ,CAAC;;;OAGd,EAAE;gBACD,EAAE,IAAI,EAAE,WAAW,EAAE,OAAO,EAAE,2FAA2F,EAAE;gBAC3H,EAAE,IAAI,EAAE,WAAW,EAAE,OAAO,EAAE,6DAA6D,EAAE;aAC9F,CAAC;SACH;KACO,CAAC;IAEX,IAAI,YAAY,GAAG,CAAC,CAAC;IACrB,MAAM,OAAO,GAA2B,EAAE,CAAC;IAE3C,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,OAAO,CAAC,GAAG,CAAC,mCAAmC,EAAE,IAAI,CAAC,IAAI,EAAE,WAAW,EAAE,QAAQ,EAAE,WAAW,EAAE,QAAQ,CAAC,CAAC;QAC1G,IAAI,MAAM,CAAC;QACX,IAAI,CAAC;YACH,0DAA0D;YAC1D,MAAM,GAAG,MAAM,GAAG,CAAC,MAAM,CACvB;;;;;;;;;;;;;;;qBAea,EACf,CAAC,QAAQ,EAAE,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,IAAI,CAAC,OAAO,EAAE,QAAQ,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAC7G,CAAC;QACJ,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,CAAC,KAAK,CAAC,yCAAyC,EAAE,IAAI,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;YAC3E,MAAM,KAAK,CAAC;QACd,CAAC;QACD,YAAY,IAAI,MAAM,CAAC,MAAM,CAAC;QAC9B,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;IACvD,CAAC;IAED,kBAAkB;IAClB,MAAM,KAAK,GAAG;QACZ;YACE,IAAI,EAAE,MAAM;YACZ,IAAI,EAAE,eAAe;YACrB,KAAK,EAAE,yBAAyB;YAChC,OAAO,EAAE,mDAAmD;YAC5D,IAAI,EAAE,QAAQ,CAAC;;aAER,WAAW;;aAEX,UAAU;;aAEV,WAAW;;aAEX,WAAW;;aAEX,UAAU;OAChB,EAAE;gBACD,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC,EAAE,OAAO,EAAE,yBAAyB,EAAE;gBACjE,EAAE,IAAI,EAAE,WAAW,EAAE,OAAO,EAAE,WAAW,EAAE;gBAC3C,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC,EAAE,OAAO,EAAE,YAAY,EAAE;gBACpD,EAAE,IAAI,EAAE,WAAW,EAAE,OAAO,EAAE,UAAU,EAAE;gBAC1C,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC,EAAE,OAAO,EAAE,iBAAiB,EAAE;gBACzD,EAAE,IAAI,EAAE,WAAW,EAAE,OAAO,EAAE,WAAW,EAAE;gBAC3C,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC,EAAE,OAAO,EAAE,kBAAkB,EAAE;gBAC1D,EAAE,IAAI,EAAE,WAAW,EAAE,OAAO,EAAE,WAAW,EAAE;gBAC3C,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC,EAAE,OAAO,EAAE,WAAW,EAAE;gBACnD,EAAE,IAAI,EAAE,WAAW,EAAE,OAAO,EAAE,UAAU,EAAE;aAC3C,CAAC;SACH;QACD;YACE,IAAI,EAAE,MAAM;YACZ,IAAI,EAAE,cAAc;YACpB,KAAK,EAAE,8BAA8B;YACrC,OAAO,EAAE,4DAA4D;YACrE,IAAI,EAAE,QAAQ,CAAC;;aAER,WAAW;;aAEX,UAAU;;aAEV,WAAW;;aAEX,WAAW;;aAEX,WAAW;;aAEX,UAAU;;aAEV,WAAW;OACjB,EAAE;gBACD,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC,EAAE,OAAO,EAAE,8BAA8B,EAAE;gBACtE,EAAE,IAAI,EAAE,WAAW,EAAE,OAAO,EAAE,WAAW,EAAE;gBAC3C,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC,EAAE,OAAO,EAAE,YAAY,EAAE;gBACpD,EAAE,IAAI,EAAE,WAAW,EAAE,OAAO,EAAE,UAAU,EAAE;gBAC1C,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC,EAAE,OAAO,EAAE,sBAAsB,EAAE;gBAC9D,EAAE,IAAI,EAAE,WAAW,EAAE,OAAO,EAAE,WAAW,EAAE;gBAC3C,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE;gBAC/C,EAAE,IAAI,EAAE,WAAW,EAAE,OAAO,EAAE,WAAW,EAAE;gBAC3C,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC,EAAE,OAAO,EAAE,SAAS,EAAE;gBACjD,EAAE,IAAI,EAAE,WAAW,EAAE,OAAO,EAAE,WAAW,EAAE;gBAC3C,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC,EAAE,OAAO,EAAE,kBAAkB,EAAE;gBAC1D,EAAE,IAAI,EAAE,WAAW,EAAE,OAAO,EAAE,UAAU,EAAE;gBAC1C,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC,EAAE,OAAO,EAAE,QAAQ,EAAE;gBAChD,EAAE,IAAI,EAAE,WAAW,EAAE,OAAO,EAAE,WAAW,EAAE;aAC5C,CAAC;SACH;KACO,CAAC;IAEX,IAAI,YAAY,GAAG,CAAC,CAAC;IACrB,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,OAAO,CAAC,GAAG,CAAC,mCAAmC,EAAE,IAAI,CAAC,IAAI,EAAE,WAAW,EAAE,QAAQ,EAAE,WAAW,EAAE,QAAQ,CAAC,CAAC;QAC1G,MAAM,MAAM,GAAG,MAAM,GAAG,CAAC,MAAM,CAC7B;;;;;;;;;;;;;;;mBAea,EACb,CAAC,QAAQ,EAAE,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,IAAI,CAAC,OAAO,EAAE,QAAQ,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAC/G,CAAC;QACF,YAAY,IAAI,MAAM,CAAC,MAAM,CAAC;IAChC,CAAC;IAED,kBAAkB;IAClB,MAAM,eAAe,GAAG;QACtB,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,GAAG,EAAE,GAAG,EAAE;QAC3C,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,GAAG,EAAE,QAAQ,EAAE,SAAS,EAAE,OAAO,CAAC,OAAO,CAAC,EAAE;QAC5E,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,OAAO,EAAE,SAAS,EAAE,OAAO,CAAC,MAAM,CAAC,EAAE;KAC1E,CAAC;IACF,MAAM,eAAe,GAAG;QACtB,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,SAAS,EAAE,GAAG,EAAE,WAAW,EAAE;QACtD,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,aAAa,EAAE,GAAG,EAAE,cAAc,EAAE;KAC9D,CAAC;IAEF,IAAI,YAAY,GAAG,CAAC,CAAC;IACrB,KAAK,MAAM,CAAC,IAAI,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI;QAChC,CAAC,QAAQ,EAAE,gBAAgB,EAAE,eAAe,CAAC;QAC7C,CAAC,QAAQ,EAAE,QAAQ,EAAE,eAAe,CAAC;KAC7B,EAAE,CAAC;QACX,OAAO,CAAC,GAAG,CAAC,mCAAmC,EAAE,IAAI,EAAE,WAAW,EAAE,QAAQ,CAAC,CAAC;QAC9E,MAAM,MAAM,GAAG,MAAM,GAAG,CAAC,MAAM,CAC7B;;;;;;;;;;mBAUa,EACb,CAAC,QAAQ,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,CAAC,CAC9B,CAAC;QACF,YAAY,IAAI,MAAM,CAAC,MAAM,CAAC;IAChC,CAAC;IAED,oDAAoD;IACpD,IAAI,sBAAsB,GAAG,CAAC,CAAC;IAC/B,IAAI,OAAO,CAAC,MAAM,CAAC,IAAI,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;QACvC,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI;YACzB,CAAC,mBAAmB,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC;YACtC,CAAC,gBAAgB,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC;YACnC,CAAC,iBAAiB,EAAE,mBAAmB,CAAC;YACxC,CAAC,YAAY,EAAE,CAAC,CAAC,CAAC;SACV,EAAE,CAAC;YACX,OAAO,CAAC,GAAG,CAAC,sCAAsC,EAAE,GAAG,EAAE,WAAW,EAAE,QAAQ,CAAC,CAAC;YAChF,MAAM,MAAM,GAAG,MAAM,GAAG,CAAC,MAAM,CAC7B;;;;;;;;;qBASa,EACb,CAAC,QAAQ,EAAE,GAAG,EAAE,KAAK,CAAC,CACvB,CAAC;YACF,sBAAsB,IAAI,MAAM,CAAC,MAAM,CAAC;QAC1C,CAAC;IACH,CAAC;IAED,OAAO,EAAE,KAAK,EAAE,YAAY,EAAE,KAAK,EAAE,YAAY,EAAE,KAAK,EAAE,YAAY,EAAE,eAAe,EAAE,sBAAsB,EAAE,CAAC;AACpH,CAAC;AAED,2DAA2D;AAC3D,MAAM,CAAC,KAAK,UAAU,wBAAwB,CAC5C,MAAW,aAAa,EAAE;IAE1B,IAAI,CAAC;QACH,MAAM,QAAQ,GAAG,MAAM,eAAe,CAAC,SAAS,CAAC,CAAC;QAElD,mCAAmC;QACnC,MAAM,WAAW,GAAG,MAAM,GAAG,CAAC,MAAM,CAClC,0EAA0E,EAC1E,CAAC,QAAQ,CAAC,CACX,CAAC;QAEF,IAAI,WAAW,CAAC,MAAM,GAAG,CAAC;YAAE,OAAO;QAEnC,uBAAuB;QACvB,MAAM,YAAY,GAAG,MAAM,GAAG,CAAC,MAAM,CACnC,yEAAyE,EACzE,CAAC,QAAQ,CAAC,CACX,CAAC;QAEF,IAAI,YAAY,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC5B,MAAM,GAAG,GAAG,YAAY,CAAC,CAAC,CAAC,CAAC;YAC5B,MAAM,OAAO,GAAG,GAAG,EAAE,CAAC,IAAI,CAAC,CAAC;YAC5B,IAAI,OAAO,EAAE,CAAC;gBACZ,MAAM,GAAG,CAAC,MAAM,CACd,uEAAuE,EACvE,CAAC,OAAO,CAAC,CACV,CAAC;YACJ,CAAC;QACH,CAAC;IACH,CAAC;IAAC,MAAM,CAAC;QACP,8CAA8C;IAChD,CAAC;AACH,CAAC"}
|
|
1
|
+
{"version":3,"file":"seed.js","sourceRoot":"","sources":["../../src/migrations/seed.ts"],"names":[],"mappings":"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"}
|