@things-factory/pdf 7.0.28 → 7.0.36

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 (70) hide show
  1. package/client/bootstrap.js +6 -0
  2. package/client/pages/pdf-template/pdf-template-importer.ts +86 -0
  3. package/client/pages/pdf-template/pdf-template-list-page.ts +491 -0
  4. package/client/route.ts +7 -0
  5. package/client/tsconfig.json +13 -0
  6. package/dist-client/bootstrap.d.ts +1 -0
  7. package/dist-client/bootstrap.js +6 -0
  8. package/dist-client/bootstrap.js.map +1 -0
  9. package/dist-client/pages/pdf-template/pdf-template-importer.d.ts +23 -0
  10. package/dist-client/pages/pdf-template/pdf-template-importer.js +93 -0
  11. package/dist-client/pages/pdf-template/pdf-template-importer.js.map +1 -0
  12. package/dist-client/pages/pdf-template/pdf-template-list-page.d.ts +66 -0
  13. package/dist-client/pages/pdf-template/pdf-template-list-page.js +464 -0
  14. package/dist-client/pages/pdf-template/pdf-template-list-page.js.map +1 -0
  15. package/dist-client/route.d.ts +1 -0
  16. package/dist-client/route.js +8 -0
  17. package/dist-client/route.js.map +1 -0
  18. package/dist-client/tsconfig.tsbuildinfo +1 -0
  19. package/dist-server/index.d.ts +1 -0
  20. package/dist-server/index.js +2 -0
  21. package/dist-server/index.js.map +1 -1
  22. package/dist-server/routers/pdf-private-router.d.ts +1 -0
  23. package/dist-server/routers/pdf-private-router.js +25 -0
  24. package/dist-server/routers/pdf-private-router.js.map +1 -0
  25. package/dist-server/routers/pdf-public-router.d.ts +1 -0
  26. package/dist-server/routers/{pdf-router.js → pdf-public-router.js} +6 -6
  27. package/dist-server/routers/pdf-public-router.js.map +1 -0
  28. package/dist-server/routes.js +13 -2
  29. package/dist-server/routes.js.map +1 -1
  30. package/dist-server/service/index.d.ts +6 -0
  31. package/dist-server/service/index.js +23 -0
  32. package/dist-server/service/index.js.map +1 -0
  33. package/dist-server/service/pdf-template/index.d.ts +6 -0
  34. package/dist-server/service/pdf-template/index.js +10 -0
  35. package/dist-server/service/pdf-template/index.js.map +1 -0
  36. package/dist-server/service/pdf-template/pdf-template-mutation.d.ts +10 -0
  37. package/dist-server/service/pdf-template/pdf-template-mutation.js +127 -0
  38. package/dist-server/service/pdf-template/pdf-template-mutation.js.map +1 -0
  39. package/dist-server/service/pdf-template/pdf-template-query.d.ts +11 -0
  40. package/dist-server/service/pdf-template/pdf-template-query.js +79 -0
  41. package/dist-server/service/pdf-template/pdf-template-query.js.map +1 -0
  42. package/dist-server/service/pdf-template/pdf-template-type.d.ts +32 -0
  43. package/dist-server/service/pdf-template/pdf-template-type.js +125 -0
  44. package/dist-server/service/pdf-template/pdf-template-type.js.map +1 -0
  45. package/dist-server/service/pdf-template/pdf-template.d.ts +28 -0
  46. package/dist-server/service/pdf-template/pdf-template.js +125 -0
  47. package/dist-server/service/pdf-template/pdf-template.js.map +1 -0
  48. package/dist-server/tsconfig.tsbuildinfo +1 -1
  49. package/helps/pdf/pdf-template.md +160 -0
  50. package/package.json +14 -9
  51. package/server/index.ts +2 -0
  52. package/server/routers/pdf-private-router.ts +24 -0
  53. package/server/routers/{pdf-router.ts → pdf-public-router.ts} +4 -4
  54. package/server/routes.ts +14 -2
  55. package/server/service/index.ts +26 -0
  56. package/server/service/pdf-template/index.ts +7 -0
  57. package/server/service/pdf-template/pdf-template-mutation.ts +138 -0
  58. package/server/service/pdf-template/pdf-template-query.ts +51 -0
  59. package/server/service/pdf-template/pdf-template-type.ts +87 -0
  60. package/server/service/pdf-template/pdf-template.ts +108 -0
  61. package/server/tsconfig.json +10 -0
  62. package/things-factory.config.js +8 -1
  63. package/translations/en.json +11 -0
  64. package/translations/ja.json +9 -0
  65. package/translations/ko.json +11 -0
  66. package/translations/ms.json +9 -0
  67. package/translations/zh.json +9 -0
  68. package/dist-server/routers/pdf-router.d.ts +0 -1
  69. package/dist-server/routers/pdf-router.js.map +0 -1
  70. package/tsconfig.json +0 -9
@@ -0,0 +1,108 @@
1
+ import {
2
+ CreateDateColumn,
3
+ UpdateDateColumn,
4
+ Entity,
5
+ Index,
6
+ Column,
7
+ RelationId,
8
+ ManyToOne,
9
+ PrimaryGeneratedColumn
10
+ } from 'typeorm'
11
+ import { ObjectType, Field, Int, ID, registerEnumType } from 'type-graphql'
12
+
13
+ import { Domain } from '@things-factory/shell'
14
+ import { User } from '@things-factory/auth-base'
15
+
16
+ export enum PDFTemplateStatus {
17
+ draft = 'draft',
18
+ released = 'released'
19
+ }
20
+
21
+ registerEnumType(PDFTemplateStatus, {
22
+ name: 'PDFTemplateStatus',
23
+ description: 'state enumeration of a PDF Template'
24
+ })
25
+
26
+ @Entity()
27
+ @Index('ix_pdf_template_0', (pdfTemplate: PDFTemplate) => [pdfTemplate.domain, pdfTemplate.name], {
28
+ unique: true
29
+ })
30
+ @ObjectType({ description: 'Entity for PDFTemplate' })
31
+ export class PDFTemplate {
32
+ @PrimaryGeneratedColumn('uuid')
33
+ @Field(type => ID)
34
+ readonly id: string
35
+
36
+ @ManyToOne(type => Domain)
37
+ @Field({ nullable: true })
38
+ domain?: Domain
39
+
40
+ @RelationId((pdfTemplate: PDFTemplate) => pdfTemplate.domain)
41
+ domainId?: string
42
+
43
+ @Column()
44
+ @Field({ nullable: true })
45
+ name?: string
46
+
47
+ @Column({ nullable: true })
48
+ @Field({ nullable: true })
49
+ description?: string
50
+
51
+ @Column({ nullable: true })
52
+ @Field({ nullable: true })
53
+ active?: boolean
54
+
55
+ @Column({ nullable: true })
56
+ @Field({ nullable: true })
57
+ state?: PDFTemplateStatus
58
+
59
+ @Column({ type: 'text', nullable: true })
60
+ @Field({ nullable: true })
61
+ content_template?: string
62
+
63
+ @Column({ type: 'text', nullable: true })
64
+ @Field({ nullable: true })
65
+ header_template?: string
66
+
67
+ @Column({ type: 'text', nullable: true })
68
+ @Field({ nullable: true })
69
+ footer_template?: string
70
+
71
+ @Column({ type: 'text', nullable: true })
72
+ @Field({ nullable: true })
73
+ cover_template?: string
74
+
75
+ @Column({ type: 'text', nullable: true })
76
+ @Field({ nullable: true })
77
+ last_template?: string
78
+
79
+ @Column({ default: 'A4' })
80
+ @Field({ nullable: true, defaultValue: 'A4' })
81
+ page_size?: string
82
+
83
+ @Column({ type: 'text', nullable: true })
84
+ @Field({ nullable: true })
85
+ watermark?: string
86
+
87
+ @CreateDateColumn()
88
+ @Field({ nullable: true })
89
+ createdAt?: Date
90
+
91
+ @UpdateDateColumn()
92
+ @Field({ nullable: true })
93
+ updatedAt?: Date
94
+
95
+ @ManyToOne(type => User, { nullable: true })
96
+ @Field(type => User, { nullable: true })
97
+ creator?: User
98
+
99
+ @RelationId((pdfTemplate: PDFTemplate) => pdfTemplate.creator)
100
+ creatorId?: string
101
+
102
+ @ManyToOne(type => User, { nullable: true })
103
+ @Field(type => User, { nullable: true })
104
+ updater?: User
105
+
106
+ @RelationId((pdfTemplate: PDFTemplate) => pdfTemplate.updater)
107
+ updaterId?: string
108
+ }
@@ -0,0 +1,10 @@
1
+ {
2
+ "extends": "../../tsconfig-base.json",
3
+ "compilerOptions": {
4
+ "strict": false,
5
+ "module": "commonjs",
6
+ "outDir": "../dist-server",
7
+ "baseUrl": "./"
8
+ },
9
+ "include": ["./**/*"]
10
+ }
@@ -1 +1,8 @@
1
- export default {}
1
+ import route from './dist-client/route'
2
+ import bootstrap from './dist-client/bootstrap'
3
+
4
+ export default {
5
+ route,
6
+ routes: [{ tagname: 'pdf-template-list-page', page: 'pdf-template-list-page' }],
7
+ bootstrap
8
+ }
@@ -0,0 +1,11 @@
1
+ {
2
+ "field.content_template": "content template",
3
+ "field.header_template": "header template",
4
+ "field.footer_template": "footer template",
5
+ "field.cover_template": "cover template",
6
+ "field.last_template": "last template",
7
+ "field.page_size": "page size",
8
+ "field.state": "state",
9
+ "field.watermark": "watermark",
10
+ "title.pdf-template list": "PDF template list"
11
+ }
@@ -0,0 +1,9 @@
1
+ {
2
+ "field.content_template": "コンテンツテンプレート",
3
+ "field.header_template": "ヘッダーテンプレート",
4
+ "field.footer_template": "フッターテンプレート",
5
+ "field.cover_template": "カバーテンプレート",
6
+ "field.last_template": "最後のテンプレート",
7
+ "field.page_size": "ページサイズ",
8
+ "field.watermark": "ウォーターマーク"
9
+ }
@@ -0,0 +1,11 @@
1
+ {
2
+ "field.content_template": "본문 템플릿",
3
+ "field.header_template": "머릿글 템플릿",
4
+ "field.footer_template": "바닥글 템플릿",
5
+ "field.cover_template": "표지 템플릿",
6
+ "field.last_template": "뒷표지 템플릿",
7
+ "field.page_size": "크기",
8
+ "field.state": "상태",
9
+ "field.watermark": "워터마크",
10
+ "title.pdf-template list": "PDF 템플릿 리스트"
11
+ }
@@ -0,0 +1,9 @@
1
+ {
2
+ "field.content_template": "templat kandungan",
3
+ "field.header_template": "templat pengepala",
4
+ "field.footer_template": "templat pengaki",
5
+ "field.cover_template": "templat muka depan",
6
+ "field.last_template": "templat terakhir",
7
+ "field.page_size": "saiz halaman",
8
+ "field.watermark": "tanda air"
9
+ }
@@ -0,0 +1,9 @@
1
+ {
2
+ "field.content_template": "内容模板",
3
+ "field.header_template": "页眉模板",
4
+ "field.footer_template": "页脚模板",
5
+ "field.cover_template": "封面模板",
6
+ "field.last_template": "最后模板",
7
+ "field.page_size": "页面大小",
8
+ "field.watermark": "水印"
9
+ }
@@ -1 +0,0 @@
1
- export declare const pdfRouter: any;
@@ -1 +0,0 @@
1
- {"version":3,"file":"pdf-router.js","sourceRoot":"","sources":["../../server/routers/pdf-router.ts"],"names":[],"mappings":"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","sourcesContent":["import await_spawn from 'await-spawn'\nimport { promises as fs } from 'fs'\nimport Router from 'koa-router'\nimport path from 'path'\nimport { withTempDir } from '@things-factory/utils'\n\nexport const pdfRouter = new Router()\n\n/* to-png */\npdfRouter.get('/to-png', async (context, next) => {\n const { url } = context.query\n\n const images = await withTempDir(async tmpDir => {\n const curl = await_spawn('curl', ['-s', url])\n\n await await_spawn('gs', ['-q', '-sDEVICE=png16m', '-o', `${tmpDir}/%d.png`, '-r300', '-'], {\n stdio: [curl.child.stdout, 'pipe', 'pipe']\n })\n\n const files = await fs.readdir(tmpDir)\n return Promise.all(\n files\n .sort(new Intl.Collator(undefined, { numeric: true }).compare)\n .map(filename => fs.readFile(path.join(tmpDir, filename)))\n )\n })\n\n /* TODO make it possible to return multiple images */\n context.type = 'image/png'\n context.body = images[0]\n})\n\n/* merge-pdf */\nconst mergePDFfiles = async urls => {\n return await withTempDir(async tmpdir => {\n const sources = typeof urls == 'string' ? [urls] : urls\n const output = path.join(tmpdir, 'output.pdf')\n const inputs = sources.map((source, idx) => path.join(tmpdir, `${idx}.pdf`))\n\n try {\n await Promise.all(\n sources.map((source, idx) => await_spawn('curl', ['-sSL', source, '-o', path.join(tmpdir, `${idx}.pdf`)]))\n )\n\n await await_spawn('gs', [\n '-q',\n '-sDEVICE=pdfwrite',\n '-dAutoRotatePages=/None',\n '-dNOPAUSE',\n '-dBATCH',\n '-dSAFER',\n `-sOutputFile=${output}`,\n ...inputs\n ])\n\n return await fs.readFile(output)\n } catch (e) {\n console.error('mergePDFfiles', 'error', e)\n }\n })\n}\n\npdfRouter.get('/merge', async (context, next) => {\n const searchParams = new URLSearchParams(context.querystring)\n const urls = searchParams.getAll('urls')\n\n const pdf = await mergePDFfiles(urls)\n\n context.type = 'application/pdf'\n context.body = pdf\n})\n\npdfRouter.post('/merge', async (context, next) => {\n const { urls } = context.request.body\n\n const pdf = await mergePDFfiles(urls)\n\n context.type = 'application/pdf'\n context.body = pdf\n})\n"]}
package/tsconfig.json DELETED
@@ -1,9 +0,0 @@
1
- {
2
- "extends": "../tsconfig-base.json",
3
- "compilerOptions": {
4
- "outDir": "./dist-server",
5
- "baseUrl": "./"
6
- },
7
- "include": ["./server/**/*"],
8
- "exclude": ["**/*.spec.ts"]
9
- }